基於哈夫曼樹的資料壓縮演算法優化版

2021-09-23 22:35:41 字數 1088 閱讀 8195

可同時處理多組字串,解決了字串中字母不按照字母表順序出現以及中間出現「缺口」字母的問題。例如原來的哈夫曼無法解決aaaaccccddd這樣的字串(b字母沒有出現)和zzzzyyanhsayyxxcccxx這樣出現順序沒有規律的情況。在輸出最終編碼的時候是引入原始字串逐個用編碼替換的,這樣保證編譯碼對任意字串都不會出錯。

#define _crt_secure_no_warnings

#include#include#include#include//#pragma warning(disable:)

using namespace std;

typedef struct htnode,*htree;

typedef char **huffmancode;

void work(char str[100], int numht[26],int times)

numht[times][str[times][i] - 'a']++;

i++; }}

void f(int numht[26], int *n, int data[26],int times)

i++; }}

void output(int numht[26],int times )

else

p++;

} cout << endl;

}void select(htree &ht, int p, int *s1, int *s2)

else if (ht[i].parent == 0 && ht[i].weight < m2) }}

void creatht(htree &ht, int *n,int data)

for (i=1; i <= p; i++)

for (i = p + 1; i <= m; i++)

for (i = 1; i <= m; i++)

work(str, numht, times);

times++;

} for (; p < times; p++)

system("pause");

return 0;

}

基於哈夫曼樹的資料壓縮演算法

描述 輸入一串字串,根據給定的字串中字元出現的頻率建立相應哈夫曼樹,構造哈夫曼編碼表,在此基礎上可以對待壓縮檔案進行壓縮 即編碼 同時可以對壓縮後的二進位制編碼檔案進行解壓 即解碼 輸入多組資料,每組資料一行,為乙個字串 只考慮26個小寫字母即可 當輸入字串為 0 時,輸入結束。輸出每組資料輸出2n...

資料結構實驗 基於哈夫曼樹的資料壓縮演算法

注 輸入為多行字串,以 0 結尾 例 abc def 0 此程式無法執行由單個字元組成的字串。include include include using namespace std typedef struct htnode,huffmantree typedef char huffmancode ...

哈夫曼壓縮演算法

給你40分鐘的時間,你可以思考十分鐘,然後用三十分鐘的時間來寫 最後浪費在無謂的除錯上 你也可以思考半個小時,徹底弄清問題的本質與程式的脈絡,然後用十分鐘的時間來編寫 體會 如行雲流水而出的感覺。在程式設計過程當中,相信大家都深有體會,在除錯上浪費時間,問題出現在下筆之前沒有乙個系統結構。哈夫曼在通...