Copy kode kodenya sebagai berikut:
//Kelas implementasi pengkodean Huffman
Pengkodean Hffman kelas publik {
private int charsAndWeight[][];// [][0] adalah karakter, [][1] menyimpan bobot (berapa kali) karakter
private int hfmcoding[][];//Penyimpanan pohon Huffman
private int i = 0; // variabel perulangan
String pribadi hcs[];
publik HffmanCoding(int[][] karakter) {
// Konstruktor TODO
charsAndWeight = int baru[chars.length][2];
charsAndWeight = karakter;
hfmcoding = new int[2 * chars.length - 1][4];//Alokasikan ruang untuk pohon Huffman
}
//Implementasi pohon Huffman
pengkodean kekosongan publik() {
int n = karakterDanBerat.panjang;
jika(n==0)
kembali;
int m = 2 * n - 1;
//Inisialisasi pohon Huffman
untuk (saya = 0; saya < n; saya++) {
hfmcoding[i][0] = charsAndWeight[i][1];//Inisialisasi bobot pohon Huffman
hfmcoding[i][1] = 0;//Inisialisasi simpul akar pohon Huffman
hfmcoding[i][2] = 0;//Inisialisasi anak kiri pohon Huffman
hfmcoding[i][3] = 0;//Inisialisasi anak kanan dari pohon Huffman
}
untuk (saya = n; saya < m; saya++) {
hfmcoding[i][0] = 0;//Inisialisasi bobot pohon Huffman
hfmcoding[i][1] = 0;//Inisialisasi simpul akar pohon Huffman
hfmcoding[i][2] = 0;//Inisialisasi anak kiri pohon Huffman
hfmcoding[i][3] = 0;//Inisialisasi anak kanan dari pohon Huffman
}
//Bangun pohon Huffman
untuk (saya = n; saya < m; saya++) {
int s1[] = select(i); // Temukan node dengan bobot terkecil yang orangtuanya nol di pohon Huffman
hfmcoding[s1[0]][1] = i;// Bayar orang tua untuk nilai minimum pohon Huffman
hfmcoding[s1[1]][1] = saya;
hfmcoding[i][2] = s1[0];//Anak kiri dari node baru
hfmcoding[i][3] = s1[1];//anak kanan dari node baru
hfmcoding[i][0] = hfmcoding[s1[0]][0] + hfmcoding[s1[1]][0];//Bobot node baru adalah penjumlahan bobot anak kiri dan kanan
}
}
//Temukan node dengan bobot terkecil yang induknya nol
pribadi int[] pilih(int w) {
// TODO Stub metode yang dibuat secara otomatis
int s[] = { -1, -1 }, j = 0; // s1 adalah nomor urut node dengan bobot terkecil dan induk nol, i adalah variabel loop
int min1 = 32767, min2 = 32767;
untuk (j = 0; j < w; j++) {
if (hfmcoding[j][1] == 0) {// Hanya menelusuri node yang belum membuat pohon biner (node dengan orangtua nol)
jika (hfmcoding[j][0] < min1) {
menit2 = menit1;
s[1] = s[0];
min1 = hfmcoding[j][0];
s[0] = j;
} lain jika (hfmcoding[j][0] < min2) {
min2 = hfmcoding[j][0];
s[1] = j;
}
}
}
kembali;
}
public String[] CreateHCode() {// Temukan kode Huffman berdasarkan pohon Huffman
int n = karakterDanBerat.panjang;
ke dalam saya, f, c;
String hcodeString = "";
hcs = String baru[n];
for (i = 0; i < n; i++) {// Temukan kode Huffman berdasarkan pohon Huffman
c = saya;
hcodeString = "";
f = hfmcoding[i][1]; // f adalah simpul akar dari pohon Huffman
while (f != 0) {//Berurutan hingga simpul akar pohon
if (hfmcoding[f][2] == c) {// Memproses node turunan kiri
hcodeString += "0";
} kalau tidak {
hcodeString += "1";
}
c = f;
f = hfmkode[f][1];
}
hcs[i] = String baru(StringBuffer baru(hcodeString).reverse());
}
kembalikan hcs;
}
public String show(String s) {// Menampilkan pengkodean string
String teksString = "";
karakter c[];
ke dalam k = -1;
c = karakter baru[s.length()];
c = s.toCharArray(); // Mengubah string menjadi array karakter
for (int i = 0; i < c.panjang; i++) {
k = c[saya];
untuk (int j = 0; j < karakterDanBerat.panjang; j++)
jika (k == karakterDanBerat[j][0])
string teks += hcs[j];
}
kembalikan string teks;
}
// Dekompilasi kode Huffman
Pengkodean ulang String publik(String s) {
String text = "";//Penyimpanan karakter yang didekompilasi
int k = 0, m = hfmcoding.length - 1;//Mulai membuat kueri dari simpul akar
karakter c[];
c = karakter baru[s.length()];
c = s.toCharArray();
k = m;
for (int i = 0; i < c.panjang; i++) {
jika (c[i] == '0') {
k = hfmcoding[k][2];//Nilai k adalah nomor urut anak kiri dari simpul akar
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Tentukan apakah itu node daun, kondisi (anak kiri dan kanan sama dengan nol)
{
teks += (char) karakterDanBerat[k][0];
k = m;
}
}
jika (c[i] == '1') {
k = hfmcoding[k][3];//Nilai k adalah nomor urut anak kanan dari simpul akar
if (hfmcoding[k][2] == 0 && hfmcoding[k][3] == 0)// Tentukan apakah itu node daun, kondisi (anak kiri dan kanan sama dengan nol)
{
teks += (char) karakterDanBerat[k][0];
k = m;
}
}
}
mengembalikan teks;
}
}