把字元從檔案中取出來,這是以前學過的io流實現的。
統計出現的字元及頻率,將各個字元建立為葉子結點,頻率為結點的權值,用鍊錶儲存這些葉子結點。
將所有帶權值的結點按權值從小到大排列;
依次選取權值最小的結點放在樹的底部,權值小的在左邊(取出的結點相當於從這些結點的集合中剔除);
生成乙個新節點作為這兩個結點的父節點,且父節點的權值等於這兩個結點權值之和,然後要把這個新結點放回我們需要構成樹的結點中,繼續進行排序;
重複上述2、3步驟,直至全部節點形成一棵樹,此樹便是哈夫曼樹,最後生成的結點即為根節點。這樣構成的哈夫曼樹,所有的儲存有資訊的結點都在葉子結點上。
解碼就是在二進位制字串中匹配字元哈夫曼編碼,找到對應的字元不斷輸出。
理論上來說就是這麼幾步了。
file file = new file("c:\\users\\lenovo\\ideaprojects\\why20172321\\src\\week10\\哈夫曼樹解碼\\hfm.txt");
哈夫曼編碼測試
1.定義 給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。2.術語 01 路徑和路徑長度 定義 在一棵樹中,從乙個結點往下可以達到的孩子或孫子結點...
哈夫曼編碼測試
設有字符集 s 給定乙個包含26個英文本母的檔案,統計每個字元出現的概率,根據計算的概率構造一顆哈夫曼樹。並完成對英文檔案的編碼和解碼。要求 1 準備乙個包含26個英文本母的英文檔案 可以不包含標點符號等 統計各個字元的概率 2 構造哈夫曼樹 3 對英文檔案進行編碼,輸出乙個編碼後的檔案 4 對編碼...
哈夫曼編碼測試
在計算機資料處理中,霍夫曼編碼使用變長編碼表對源符號 如檔案中的乙個字母 進行編碼,其中變長編碼表是通過一種評估 符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度 期望值降低,從而達到無失真壓縮資料的目的。例如,在英文中,e的...