Copie el código de código de la siguiente manera:
//Clase de implementación de la codificación Huffman
clase pública HffmanCoding {
private int charsAndWeight[][];// [][0] es el carácter, [][1] almacena el peso (número de veces) del carácter
private int hfmcoding[][];//Árbol de almacenamiento Huffman
privado int i = 0; // variable de bucle
Cadena privada hcs[];
public HffmanCoding(int[][] caracteres) {
// constructor TODO
charsAndWeight = nuevo int[chars.length][2];
caracteres y peso = caracteres;
hfmcoding = new int[2 * chars.length - 1][4];//Asignar espacio para el árbol de Huffman
}
//Implementación del árbol de Huffman
codificación nula pública() {
int n = caracteres y peso.length;
si(n==0)
devolver;
int metro = 2 * norte - 1;
//Inicializa el árbol de Huffman
para (i = 0; i < n; i++) {
hfmcoding[i][0] = charsAndWeight[i][1];//Inicializa el peso del árbol de Huffman
hfmcoding[i][1] = 0;//Inicializa el nodo raíz del árbol de Huffman
hfmcoding[i][2] = 0;//Inicializa el hijo izquierdo del árbol de Huffman
hfmcoding[i][3] = 0;//Inicializa el hijo derecho del árbol de Huffman
}
para (i = n; i < m; i++) {
hfmcoding[i][0] = 0;//Inicializa los pesos del árbol de Huffman
hfmcoding[i][1] = 0;//Inicializa el nodo raíz del árbol de Huffman
hfmcoding[i][2] = 0;//Inicializa el hijo izquierdo del árbol de Huffman
hfmcoding[i][3] = 0;//Inicializa el hijo derecho del árbol de Huffman
}
//Construir el árbol de Huffman
para (i = n; i < m; i++) {
int s1[] = select(i); // Encuentra el nodo con el peso más pequeño cuyos padres son cero en el árbol de Huffman.
hfmcoding[s1[0]][1] = i;// Pagar a los padres por el valor mínimo del árbol de Huffman
codificación hfm[s1[1]][1] = i;
hfmcoding[i][2] = s1[0];//Hijo izquierdo del nuevo nodo
hfmcoding[i][3] = s1[1];//hijo derecho del nuevo nodo
hfmcoding[i][0] = hfmcoding[s1[0]][0] + hfmcoding[s1[1]][0];//El peso del nuevo nodo es la suma de los pesos de los hijos izquierdo y derecho
}
}
//Encuentra el nodo con el peso más pequeño cuyo padre sea cero
privado int[] seleccionar(int w) {
// TODO Código auxiliar de método generado automáticamente
int s[] = { -1, -1 }, j = 0; // s1 es el número de secuencia del nodo con el peso más pequeño y padre cero, i es la variable del bucle
int min1 = 32767, min2 = 32767;
para (j = 0; j < w; j++) {
if (hfmcoding[j][1] == 0) {// Buscar solo en nodos que aún no hayan construido un árbol binario (nodos sin padres)
si (hfmcoding[j][0] < min1) {
mín2 = mín1;
s[1] = s[0];
min1 = codificación hfm[j][0];
s[0] = j;
} más si (hfmcoding[j][0] < min2) {
min2 = codificación hfm[j][0];
s[1] = j;
}
}
}
devolver s;
}
public String[] CreateHCode() {// Encuentra el código de Huffman basado en el árbol de Huffman
int n = caracteres y peso.length;
int i, f, c;
Cadena hcodeString = "";
hcs = nueva cadena[n];
for (i = 0; i < n; i++) {// Encuentra el código de Huffman basado en el árbol de Huffman
c = yo;
hcodeString = "";
f = hfmcoding[i][1]; // f es el nodo raíz del árbol de Huffman
while (f != 0) {//Secuencialmente hasta el nodo raíz del árbol
if (hfmcoding[f][2] == c) {// Procesa el nodo secundario izquierdo
hcodeString += "0";
} demás {
hcodeString += "1";
}
c = f;
f = codificación hfm[f][1];
}
hcs[i] = new String(new StringBuffer(hcodeString).reverse());
}
volver hcs;
}
public String show(String s) {// Muestra la codificación de la cadena
Cadena cadena de texto = "";
carácter c[];
int k = -1;
c = nuevo carácter[s.length()];
c = s.toCharArray(); // Convertir cadena en matriz de caracteres
para (int i = 0; i < c.length; i++) {
k = c[i];
para (int j = 0; j < charsAndWeight.length; j++)
si (k == caracteres y peso [j] [0])
cadena de texto += hcs[j];
}
devolver cadena de texto;
}
// descompilación del código Huffman
reCodificación de cadenas públicas (cadenas s) {
String text = "";//Almacenamiento de caracteres descompilados
int k = 0, m = hfmcoding.length - 1;//Comienza a consultar desde el nodo raíz
carácter c[];
c = nuevo carácter[s.length()];
c = s.toCharArray();
k = metro;
para (int i = 0; i < c.length; i++) {
si (c[i] == '0') {
k = hfmcoding[k][2];//El valor de k es el número de secuencia del hijo izquierdo del nodo raíz
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Determine si es un nodo hoja, condición (tanto los hijos izquierdo como derecho son cero)
{
texto += (char) charsAndWeight[k][0];
k = metro;
}
}
si (c[i] == '1') {
k = hfmcoding[k][3];//El valor de k es el número de secuencia del hijo derecho del nodo raíz
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Determine si es un nodo hoja, condición (tanto los hijos izquierdo como derecho son cero)
{
texto += (char) charsAndWeight[k][0];
k = metro;
}
}
}
devolver texto;
}
}