0

頻度表に基づいてハフマン木に取り組んでいます。頻度表は、特定の文字列内の文字の頻度をカウントし、それぞれの項目 (文字と頻度) を LinkedList に配置することで生成されます。次に、アイテムを頻度順にハフマン ツリーに配置する必要があります。その背後にあるロジックは、各サブツリーに右ノードと左ノードがあることを確認し、それらの周波数を追加し、追加された周波数でルートノードを作成し、次の周波数を左ツリーと右ツリーにそれぞれ配置し、このプロセスを頻度はなくなり、サブツリーは頻度を追加するルートに接続されます。私が抱えている問題は、コードを実装する方法を考え出すことです。

コードはかなり広範囲なので、すべてを投稿するのは避けたいと思います。一般的なレイアウトは、テーブルを作成できる HuffmanFrequencyTable クラス、ツリーに配置するノードを作成できる HuffmanTreeNode クラス、および実際のツリーを作成するのに役立つ HuffmanTree クラス。次にエンコード クラスが文字列を入力し、作成した HuffmanFrequencyTable を使用して文字列からツリーを構築します。これは宿題の問題なので、解決策を提供しないでください。コードのロジックを理解するのに役立つことを願っています。

現在、ツリーに配置された文字の配列を作成し、配列にないテーブルに残っている文字の中で最も低い頻度を見つけて、それらを葉に配置しようとしています。サブツリーのベース リーフがいっぱいになったら、それらの値を追加し、ノードを作成して、ツリーを上に進めようとしています。これには for ループを使用しています。これは正しいスタートのように思えますか?

4

2 に答える 2

2

Sajitが言うように、あなたは正しい道を進んでいます。たぶんあなたは次のようなもので追加のクラスHuffmannTupleを定義します

public class HuffmannTuple{

    public char character;
    public double frequency;

    public HuffmannTuple(char char, double freq){
        character = char;
        frequency = freq;
    }

}

そして、平均語長などの値を泡立てて計算するために、それらのソートリストを作成します。あるいは

public class HuffmannTriple{

    public char character;
    public double frequency;
    public String code;

    public HuffmannTuple(char char, double freq){
        character = char;
        frequency = freq;
    }

    public void setCode(String c){
        code = c;
    }

}

対応するコードを後で設定するため。

于 2012-10-24T05:32:31.227 に答える
1

はい。あなたは正しい軌道に乗っています。

デコードには、同じツリーを使用し、葉ノードに到達するまで左または右にトラバースします。これが文字です。

于 2012-10-24T05:12:06.157 に答える