[問題描述]
利用哈夫曼編碼進行通訊,可以壓縮通訊的資料量,提高傳輸效率,縮短資訊的傳輸時間,還有一定的保密性。現在要求編寫一程式模擬傳輸過程,實現在傳送前將要傳送的字元資訊進行編碼,然後進行傳送,接收後將傳來的資料進行解碼,即將資訊還原成傳送前的字元資訊。
[實現提示]
在本例中設定傳送者和接受者兩個功能,
傳送者的功能包括:
①輸入待傳送的字元資訊;
②統計字元資訊中出現的字元種類數和各字元出現的次數(頻率);
②根據字元的種類數和各自出現的次數建立哈夫曼樹;
③利用以上哈夫曼樹求出各字元的哈夫曼編碼;
④將字元資訊轉換成對應的編碼資訊進行傳送。
接受者的功能包括:
①接收傳送者傳送來的編碼資訊;
②利用上述哈夫曼樹對編碼資訊進行翻譯,即將編碼資訊還原成傳送前的字元資訊。
從以上分析可發現,在本例中的主要演算法有三個:
(1)哈夫曼樹的建立;
(2)哈夫曼編碼的生成;
(3)對編碼資訊的翻譯。
分析:輸進去乙個字串的時候,先統計每乙個字元出現的次數,即權值,然後統計出現的字元種類數,接下來就是建樹過程,詳見**,統計編碼的時候用結構體倒著儲存,但是這樣解碼的時候對比不方便,因此用map對映將編碼和字元建立聯絡,而且只用了兩種對映關係:
字元對編碼、編碼對字元。解碼的時候在這個對映關係裡面尋找對應的字元,若最後沒有找到對應的字元,則解碼失敗。
原始碼:
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define maxvalue 10000
#define maxleaf 30
#define maxbit 100
int n;
string str;
mapbianma1;
mapbianma2;
typedef struct
hcodetype;
typedef struct
hnodetype;
void haffmantree(hnodetype huffnode)
n=0;
for(int i=0;i<52;i++)
for(int i=0;i<2*n-1;++i)
system("cls");
cout<>str3;
for(int i=0;i
哈夫曼編碼 解碼系統(樹應用)
利用哈夫曼編碼進行通訊,可以壓縮通訊的資料量,提高傳輸效率,縮短資訊的傳輸時間,還有一定的保密性。現在要求編寫一程式模擬傳輸過程,實現在傳送前將要傳送的字元資訊進行編碼,然後進行傳送,接收後將傳來的資料進行解碼,即將資訊還原成傳送前的字元資訊。在本例中設定傳送者和接受者兩個功能,傳送者的功能包括 輸...
哈夫曼編碼解碼
簡單實現編碼解碼功能 列印哈夫曼樹形 該怎麼做呢 求教!實現初始化,建立huffman樹,並完成字元的編碼 之前解碼用for迴圈不能夠重新復位遍歷 while更好用 include stdio.h include string.h define n 10 待編碼字元的個數,即樹中葉結點的最大個數 d...
哈夫曼樹的應用 哈夫曼編碼
include include include 樹結點定義 typedef struct htnode,huffmantree static char n 100 用於儲存正文 哈弗曼編碼,char型二級指標 typedef char huffmancode 封裝最小權結點和次小權結點 typede...