1.問題描述:利用哈夫曼編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接收端將傳來的資料進行解碼(解碼)。對於雙工通道(即可以雙向傳輸資訊的通道),每端都需要乙個完整的編/解碼系統。試為這樣的資訊收發站設計乙個哈夫曼編譯碼系統。
2.基本要求
(1)初始化(initialzation)。從資料檔案datafile.data中讀入字元及每個字元的權值,建立哈夫曼樹hufftree;
(2)編碼(encoding)。用已建好的哈夫曼樹,對檔案tobetran.data中的文字進行編碼形成報文,將報文寫在檔案code.txt中;
(3)解碼(decoding)。利用已建好的哈夫曼樹,對檔案codefile.data中的**進行解碼形成原文,結果存入檔案textfile.txt中;
(4)輸出(output)。輸出datafile.data**現的字元以及各字元出現的頻度(或概率);輸出tobetran.data及其報文code.txt;輸出codefile.data及其原文textfile.txt;
#include#include#include#define charnum 26
typedef struct
dfilenode ;
typedef struct
htnode,*huffmantree;
huffmantree ht;
void creatdatafile()
fp=fopen("file.dat","wb");
for(i=1;i<=26;i++)
fclose(fp);
fp=fopen("file.dat","rb");
printf("字元及每個字元出現的次數\n");
while(fread(&s,1,sizeof(dfilenode),fp))
fclose(fp);
}int min(huffmantree t,int i) }
void print_huff_tree(huffmantree ht ,int n)
void inithtree(huffmantree &ht,int n)
fclose(f1);
printf("\n");
for(;i<=m;++i,++p)
for(i=n+1;i<=m;++i)
}void huffmancoding(huffmantree &ht,int n)
free(cd);
}void encoding()
fclose(f1);
fclose(f2);
}void decoding()
} fclose(f1);
fclose(f2);
}void creattobetran()
fclose(fp);
} void creatcodefile()
fclose(fp);
fp=fopen("codefile.dat","r");
while(fread(&s,1,sizeof(int),fp))
fclose(fp);
}void output_1()
void output_2()
int main()
printf("\n");
creattobetran();
encoding();
output_1();
creatcodefile();
printf("\n");
decoding();
output_2();
while(1)
printf("你還想幹啥?\n");
printf(" 1.編碼\n 2.解碼\n 3.退出");
scanf(" %d",&x);
switch(x)
case 2:
case 3:
default:} }
注:輸入模板碼來獲取權重。
哈夫曼編譯碼演算法(C實現)
記得在畢業前去找工作,應聘康佳集團移動應用工程師的筆試題出了這麼一道題。傳輸文字字元 badcadfeed 只能出現 abcdef 這六個字元,使用以下的編碼方式 如傳輸字元 badcadfeed 接收編碼 001000011010000011101100100011 接收方可以根據每3個bit進行...
哈夫曼樹以及編譯碼
這一篇要總結的是樹中的最後一種,即哈夫曼樹,我想從以下幾點對其進行總結 1,什麼是哈夫曼樹?2,如何構建哈夫曼樹?3,哈夫曼編碼?4,演算法實現?回到頂部 什麼是哈夫曼樹呢?哈夫曼樹是一種帶權路徑長度最短的二叉樹,也稱為最優二叉樹。下面用一幅圖來說明。它們的帶權路徑長度分別為 圖a wpl 5 2 ...
哈夫曼樹編 解碼演算法
一 實驗目的 掌握哈弗曼編 解碼演算法。1.掌握huffman 樹的概念 特點和儲存結構 2.掌握huffman 樹的構造方法 3.學會靈活運用huffman 樹解決編碼問題。4.問題描述 5.某報文中共出現n個字元,各字元出現頻度依次為w1,w2,wn。要求設計乙個不等長的編碼方案,輸出每個字元對...