0
私のハフマンコードに問題があります。メインメソッドでは、シンボルの頻度を含むInteger配列を入力します。これは、各シンボルとそのハフマンコードを印刷する必要がありますが、私は何かがメインで周波数配列からのハフマン符号化(Java)
間違っていると思う:
ハフマン符号で今int[] histo = new int[]{8, 65, 124, 55, 2, 1, 0, 1};
System.out.println("Codage de Huffman:");
String[] huffman = huffman(histo);
for (int i = 0; i < huffman.length; i++) {
if (histo[i] > 0) {
System.out.println(i + "] " + huffman[i]);
}
}
:ここ
public static String[] huffman(int[] histo) {
String[] codage = new String[histo.length];
int valeur1;
int valeur2;
int index1 = 0;
int index2 = 0;
for (int i = 0; i < histo.length; i++) {
codage[i] = new String();
}
do {
valeur1 = Integer.MAX_VALUE;
valeur2 = Integer.MAX_VALUE;
for (int i = 0; i < histo.length; i++) {
if (histo[i] > 0) {
if (histo[i] < valeur1) {
valeur2 = valeur1;
valeur1 = histo[index1 = i];
} else if (histo[i] < valeur2) {
valeur2 = histo[index2 = i];
}
}
}
histo[index1] = 0;
histo[index2] += valeur1;
codage[index1] = codage[index1] + "0";
codage[index2] = codage[index2] + "1";
} while (valeur2 != Integer.MAX_VALUE);
return codage;
}
が出力されます。
0] 0
1] 0
2] 0
3] 111101
4] 0
5] 0
7] 110
何が間違っているかを具体的に説明してください。出力が出ていませんか?間違った出力?例外? –
私は間違った出力を得ました。おかげで –