Copiez le code comme suit :
//Classe d'implémentation du codage de Huffman
classe publique HffmanCoding {
private int charsAndWeight[][];// [][0] est le caractère, [][1] stocke le poids (nombre de fois) du caractère
private int hfmcoding[][];//Arbre de Huffman de stockage
private int i = 0; // variable de boucle
chaîne privée hcs[];
public HffmanCoding(int[][] chars) {
// Constructeur TODO
charsAndWeight = new int[chars.length][2];
charsAndWeight = caractères ;
hfmcoding = new int[2 * chars.length - 1][4];//Allouer de l'espace pour l'arbre de Huffman
}
//Implémentation de l'arbre de Huffman
codage vide public() {
int n = charsAndWeight.length;
si(n==0)
retour;
int m = 2 * n - 1 ;
//Initialiser l'arbre de Huffman
pour (je = 0; je < n; je++) {
hfmcoding[i][0] = charsAndWeight[i][1];//Initialiser le poids de l'arbre de Huffman
hfmcoding[i][1] = 0;//Initialiser le nœud racine de l'arbre de Huffman
hfmcoding[i][2] = 0;//Initialiser le fils gauche de l'arbre de Huffman
hfmcoding[i][3] = 0;//Initialiser le bon enfant de l'arbre de Huffman
}
pour (je = n; je < m; je++) {
hfmcoding[i][0] = 0;//Initialiser les poids de l'arbre de Huffman
hfmcoding[i][1] = 0;//Initialiser le nœud racine de l'arbre de Huffman
hfmcoding[i][2] = 0;//Initialiser le fils gauche de l'arbre de Huffman
hfmcoding[i][3] = 0;//Initialiser le bon enfant de l'arbre de Huffman
}
//Construction d'un arbre de Huffman
pour (je = n; je < m; je++) {
int s1[] = select(i); // Trouver le nœud avec le plus petit poids dont les parents sont nuls dans l'arbre de Huffman
hfmcoding[s1[0]][1] = i;// Payer les parents pour la valeur minimale de l'arbre de Huffman
hfmcoding[s1[1]][1] = je;
hfmcoding[i][2] = s1[0];//Enfant gauche du nouveau nœud
hfmcoding[i][3] = s1[1];//enfant droit du nouveau nœud
hfmcoding[i][0] = hfmcoding[s1[0]][0] + hfmcoding[s1[1]][0];//Le poids du nouveau nœud est la somme des poids des enfants gauche et droit
}
}
//Trouver le nœud avec le plus petit poids dont le parent est zéro
private int[] select(int w) {
// TODO Stub de méthode généré automatiquement
int s[] = { -1, -1 }, j = 0; // s1 est le numéro de séquence du nœud avec le plus petit poids et zéro parent, i est la variable de boucle
int min1 = 32767, min2 = 32767 ;
pour (j = 0; j < w; j++) {
if (hfmcoding[j][1] == 0) {// Rechercher uniquement dans les nœuds qui n'ont pas encore construit d'arbre binaire (nœuds avec zéro parent)
si (hfmcoding[j][0] < min1) {
min2 = min1 ;
s[1] = s[0];
min1 = hfmcoding[j][0];
s[0] = j;
} sinon si (hfmcoding[j][0] < min2) {
min2 = hfmcoding[j][0];
s[1] = j;
}
}
}
retourner s ;
}
public String[] CreateHCode() {// Trouver le code de Huffman basé sur l'arbre de Huffman
int n = charsAndWeight.length;
int je, f, c;
Chaîne hcodeString = "" ;
hcs = nouvelle chaîne[n];
for (i = 0; i < n; i++) {// Trouver le code de Huffman basé sur l'arbre de Huffman
c = je;
hcodeString = "";
f = hfmcoding[i][1]; // f est le nœud racine de l'arbre de Huffman
while (f != 0) {//Séquentiellement jusqu'au nœud racine de l'arborescence
if (hfmcoding[f][2] == c) {// Traite le nœud enfant gauche
hcodeString += "0";
} autre {
hcodeString += "1";
}
c = f;
f = hfmcoding[f][1];
}
hcs[i] = new String(new StringBuffer(hcodeString).reverse());
}
retourner les hcs ;
}
public String show(String s) {// Afficher l'encodage de la chaîne
Chaîne texteChaîne = "" ;
char c[];
entier k = -1 ;
c = new char[s.length()];
c = s.toCharArray(); // Convertit une chaîne en tableau de caractères
pour (int i = 0; i < c.length; i++) {
k = c[je];
pour (int j = 0; j < charsAndWeight.length; j++)
si (k == charsAndWeight[j][0])
textString += hcs[j];
}
renvoie une chaîne de texte ;
}
// Décompilation du codage de Huffman
public String reCoding (String s) {
String text = "";//Stockage des caractères décompilés
int k = 0, m = hfmcoding.length - 1;//Démarrer l'interrogation à partir du nœud racine
char c[];
c = new char[s.length()];
c = s.toCharArray();
k = m;
pour (int i = 0; i < c.length; i++) {
si (c[i] == '0') {
k = hfmcoding[k][2];//La valeur de k est le numéro de séquence de l'enfant gauche du nœud racine
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Déterminer s'il s'agit d'un nœud feuille, condition (les enfants de gauche et de droite sont nuls)
{
text += (char) charsAndWeight[k][0];
k = m;
}
}
si (c[i] == '1') {
k = hfmcoding[k][3];//La valeur de k est le numéro de séquence de l'enfant droit du nœud racine
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Déterminer s'il s'agit d'un nœud feuille, condition (les enfants de gauche et de droite sont nuls)
{
text += (char) charsAndWeight[k][0];
k = m;
}
}
}
renvoyer du texte ;
}
}