Copie o código do código da seguinte forma:
//Classe de implementação da codificação Huffman
classe pública HffmanCoding {
private int charsAndWeight[][];// [][0] é o caractere, [][1] armazena o peso (número de vezes) do caractere
private int hfmcoding[][];//Árvore Huffman de armazenamento
private int i = 0; // variável de loop
String privada hcs[];
public HffmanCoding(int[][] caracteres) {
// Construtor TODO
charsAndWeight = novo int[chars.length][2];
charsAndWeight = chars;
hfmcoding = new int[2 * chars.length - 1][4];//Alocar espaço para a árvore Huffman
}
//Implementação da árvore Huffman
codificação pública nula() {
int n = charsAndWeight.comprimento;
se(n==0)
retornar;
interno m = 2 * n - 1;
// Inicializa a árvore Huffman
para (eu = 0; eu <n; eu++) {
hfmcoding[i][0] = charsAndWeight[i][1];//Inicializa o peso da árvore Huffman
hfmcoding[i][1] = 0;//Inicializa o nó raiz da árvore Huffman
hfmcoding[i][2] = 0;//Inicializa o filho esquerdo da árvore Huffman
hfmcoding[i][3] = 0;//Inicializa o filho direito da árvore Huffman
}
para (eu = n; eu <m; eu++) {
hfmcoding[i][0] = 0;//Inicializa os pesos da árvore Huffman
hfmcoding[i][1] = 0;//Inicializa o nó raiz da árvore Huffman
hfmcoding[i][2] = 0;//Inicializa o filho esquerdo da árvore Huffman
hfmcoding[i][3] = 0;//Inicializa o filho direito da árvore Huffman
}
//Constrói a árvore Huffman
para (eu = n; eu <m; eu++) {
int s1[] = select(i); // Encontre o nó com o menor peso cujos pais são zero na árvore de Huffman
hfmcoding[s1[0]][1] = i;// Paga aos pais pelo valor mínimo da árvore de Huffman
hfmcodificação[s1[1]][1] = i;
hfmcoding[i][2] = s1[0];//filho esquerdo do novo nó
hfmcoding[i][3] = s1[1];//filho direito do novo nó
hfmcoding[i][0] = hfmcoding[s1[0]][0] + hfmcoding[s1[1]][0];//O peso do novo nó é a soma dos pesos dos filhos esquerdo e direito
}
}
//Encontre o nó com o menor peso cujo pai é zero
privado int[] selecione(int w) {
// TODO stub de método gerado automaticamente
int s[] = { -1, -1 }, j = 0; // s1 é o número de sequência do nó com o menor peso e pai zero, i é a variável do loop
int min1 = 32767, min2 = 32767;
para (j = 0; j < w; j++) {
if (hfmcoding[j][1] == 0) {// Pesquise apenas em nós que ainda não construíram uma árvore binária (nós com zero pais)
if (hfmcodificação[j][0] < min1) {
min2 = min1;
s[1] = s[0];
min1 = hfmcodificação[j][0];
s[0] = j;
} else if (hfmcoding[j][0] < min2) {
min2 = hfmcodificação[j][0];
s[1] = j;
}
}
}
retornar;
}
public String[] CreateHCode() {// Encontre o código Huffman baseado na árvore Huffman
int n = charsAndWeight.comprimento;
int eu, f, c;
String hcodeString = "";
hcs = nova String[n];
for (i = 0; i < n; i++) {// Encontre o código Huffman baseado na árvore Huffman
c = eu;
hcodeString = "";
f = hfmcoding[i][1]; // f é o nó raiz da árvore Huffman
while (f != 0) {//Sequencialmente até o nó raiz da árvore
if (hfmcoding[f][2] == c) {// Processa o nó filho esquerdo
hcodeString += "0";
} outro {
hcodeString += "1";
}
c=f;
f = hfmcodificação[f][1];
}
hcs[i] = new String(new StringBuffer(hcodeString).reverse());
}
retornar hcs;
}
public String show(String s) {// Exibe a codificação da string
String textoString = "";
caractere c[];
int k = -1;
c = novo char[s.comprimento()];
c = s.toCharArray(); // Converte string em array de caracteres
for (int i = 0; i < c.length; i++) {
k = c[eu];
for (int j = 0; j <charsAndWeight.length; j++)
if (k == charsAndWeight[j][0])
textString += hcs[j];
}
retornar string de texto;
}
// Descompilação da codificação Huffman
public String reCoding (String s) {
String text = "";//Armazena caracteres descompilados
int k = 0, m = hfmcoding.length - 1;//Iniciar consulta a partir do nó raiz
caractere c[];
c = novo char[s.comprimento()];
c = s.toCharArray();
k = m;
for (int i = 0; i < c.length; i++) {
se (c[i] == '0') {
k = hfmcoding[k][2];//O valor de k é o número de sequência do filho esquerdo do nó raiz
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Determine se é um nó folha, condição (os filhos esquerdo e direito são zero)
{
texto += (char) charsAndWeight[k][0];
k = m;
}
}
se (c[i] == '1') {
k = hfmcoding[k][3];//O valor de k é o número de sequência do filho direito do nó raiz
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Determine se é um nó folha, condição (os filhos esquerdo e direito são zero)
{
texto += (char) charsAndWeight[k][0];
k = m;
}
}
}
retornar texto;
}
}