哈夫曼編碼 解碼系統(樹應用)

2021-07-25 14:26:43 字數 1356 閱讀 2374

[問題描述]

利用哈夫曼編碼進行通訊,可以壓縮通訊的資料量,提高傳輸效率,縮短資訊的傳輸時間,還有一定的保密性。現在要求編寫一程式模擬傳輸過程,實現在傳送前將要傳送的字元資訊進行編碼,然後進行傳送,接收後將傳來的資料進行解碼,即將資訊還原成傳送前的字元資訊。

[實現提示]

在本例中設定傳送者和接受者兩個功能,

傳送者的功能包括:

①輸入待傳送的字元資訊;

②統計字元資訊中出現的字元種類數和各字元出現的次數(頻率);

②根據字元的種類數和各自出現的次數建立哈夫曼樹;

③利用以上哈夫曼樹求出各字元的哈夫曼編碼;

④將字元資訊轉換成對應的編碼資訊進行傳送。

接受者的功能包括:

①接收傳送者傳送來的編碼資訊;

②利用上述哈夫曼樹對編碼資訊進行翻譯,即將編碼資訊還原成傳送前的字元資訊。

從以上分析可發現,在本例中的主要演算法有三個:

(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...