可同時處理多組字串,解決了字串中字母不按照字母表順序出現以及中間出現「缺口」字母的問題。例如原來的哈夫曼無法解決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分鐘的時間,你可以思考十分鐘,然後用三十分鐘的時間來寫 最後浪費在無謂的除錯上 你也可以思考半個小時,徹底弄清問題的本質與程式的脈絡,然後用十分鐘的時間來編寫 體會 如行雲流水而出的感覺。在程式設計過程當中,相信大家都深有體會,在除錯上浪費時間,問題出現在下筆之前沒有乙個系統結構。哈夫曼在通...