資料結構實驗之二叉樹六 哈夫曼編碼

2021-07-16 13:53:27 字數 1022 閱讀 7428

time limit: 1000ms   memory limit: 65536k  有疑問?點這裡^_^

字元的編碼方式有多種,除了大家熟悉的ascii

編碼,哈夫曼編碼

(huffman coding)

也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用於資料檔案壓縮中,其壓縮率通常在

20%~

90%之間。你的任務是對從鍵盤輸入的乙個字串求出它的

ascii

編碼長度和哈夫曼編碼長度的比值。

輸入資料有多組,每組資料一行,表示要編碼的字串。

對應字元的

ascii

編碼長度la,

huffman

編碼長度lh和

la/lh的值(

保留一位小數

),資料之間以空格間隔。

aaaaabcd

the_cat_in_the_hat

64 13 4.9

144 51 2.8

哈夫曼編碼問題實質上就是乙個求最優二叉樹的問題,但也可以用陣列來做,大體思想就是先把每個字母出現的次數求出來,然後由小到大排序,取前兩個最小的數值相加儲存到乙個佇列中,然後用相加後的值取代陣列中前兩個最小的值,這個過程迴圈進行,並把佇列中的數值依次相加,佇列中相加的值即為所求。然而這個演算法的效率較為低下,當陣列很大的時候,就會超時!

#include#include#include#include#includeusing namespace std;

char tree[500];字串

int num[500];//統計字元個數

bool cmp(int x,int y)//將字串個數排序

printf("%d %d %.1lf\n",summ,sum,double((summ+0.0)/(sum+0.0)));//輸出時強制型別轉換

}return 0;

}

資料結構實驗之二叉樹六 哈夫曼編碼

time limit 1000ms memory limit 65536k 有疑問?點這裡 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼...

資料結構實驗之二叉樹六 哈夫曼編碼

time limit 1000ms memory limit 65536k 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用於資料...

資料結構實驗之二叉樹六 哈夫曼編碼

time limit 1000ms memory limit 65536k 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用於資料...