そのため、ハフマン木をたどって各文字へのパスのコードを見つけるのに問題があります。基本的に私がしたことは次のとおりです。FileReaderを使用してファイルを読み取り、各バイトを取得してから文字として扱い、それを配列に配置し、char[]
別のint[]
配列を使用して各文字の対応する周波数を保存しました。その後、配列を移動し、char と frequency を使用して Tree オブジェクトを作成しました。私が作成した各ツリーは、それをtree[]
配列を作成し、その配列を使用して最終的なハフマン ツリーを作成しました。ツリーを移動して文字へのパスを見つけ、パスコードを作成する方法がわかりません。私はコーディングを始めて 5 か月しか経っていないので、専門家ではありません。パス コードの右が 0、左が 1 であり、これらの値を別の配列に格納することを計画していましたが、以前のいくつかを読んだ後悪い考えだと思った投稿。助けてください!私のツリーは以下に従います。
private void crearArbol(){
arbol = new Arbol[cantidadSimbolos];
for(int i = 0; i < cantidadSimbolos; ++i){
arbol[i] = new Arbol(charsDelArchivo[i], frecuenciaChars[i]);
}
while(arbol.length > 1){
Arbol [] provisional = new Arbol[arbol.length-1];
for(int p = 2; p <arbol.length; ++p){
provisional[p-1] = arbol[p];
}
provisional[0] = new Arbol(arbol[0].getFrecuencia()+arbol[1].getFrecuencia());
provisional[0].adoptarHijos(arbol[0], arbol[1]);
this.arbol = provisional;
ordenarVectores(0);
System.gc();
}
}
これは、各文字と対応する周波数の配列を移動することにより、ハフマン ツリーを作成するために作成したものです... ps。私たちの教授は、ArrayList などの Java ライブラリを使用することを許可していませんが、理由はわかりません。彼は物事を複雑にするのが好きです。