簡體   English   中英

從最小堆 C++ 創建霍夫曼代碼樹

[英]Create Huffman Code Tree from min-heap C++

假設您有一個 C++ 程序,它必須從給定的 .txt 文件中讀取文本。 該計划將:

  • 計算文件中每個字符的出現次數,然后每個唯一的字符(及其頻率)將存儲為新的樹節點
  • 然后程序構建一個包含這些節點的最小堆,然后使用這個最小堆構建霍夫曼代碼樹。
  • 遍歷(前序和中序)將被寫入輸出文件。 樹的每個內部節點都會有標簽 I:xxx,其中 xxx 是 int 標簽,葉子有 L:xxx
  • 該程序最終構造了一個表,其中包含存儲為字符串的每個字符的編碼(基於 ASCII,而不是真正的 .bin 版本)

我想我會將每個節點存儲在一個 huffman 類中,如下所示:

struct CharNode {

      char value;
      int frequency;
      bool internal;
      int label;
      CharNode *parent;
      CharNode *left_child;
      CharNode *right_child;
};

我不完全確定從哪里開始。 任何幫助將非常感激!

首先使用一個數組,該數組的長度足以為您的應用程序應識別的每個字符包含一個元素。 現在遍歷字符串並增加與它們的 ASCII 值相對應的數組元素。 (您可能需要減去初始 ASCII 值的某個基數,因此您開始計算 'a' 的第一個數組元素)

這部分也可以很容易地在 C 中完成,因為它使用字符和整數作為等價物。

完成后,您將擁有所有字符及其出現次數。 現在,一旦開始構建樹節點,您就可以遍歷數組。 並在該樹上使用您的堆算法。

或者只是對數組進行排序,然后從那里開始構建您的樹。

祝你好運和快樂編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM