c語(yǔ)言編寫(xiě)哈夫曼編碼 哈夫曼編碼為什么能壓縮?
哈夫曼編碼為什么能壓縮?因?yàn)楠?dú)特的編碼。以一個(gè)字符串為例,根據(jù)字符出現(xiàn)的概率構(gòu)造碼字。大概率的長(zhǎng)度短的碼字和小概率的長(zhǎng)度長(zhǎng)的碼字會(huì)平均縮短總長(zhǎng)度(實(shí)際上相當(dāng)于加權(quán)平均),從而達(dá)到壓縮的目的。什么是24
哈夫曼編碼為什么能壓縮?
因?yàn)楠?dú)特的編碼。以一個(gè)字符串為例,根據(jù)字符出現(xiàn)的概率構(gòu)造碼字。大概率的長(zhǎng)度短的碼字和小概率的長(zhǎng)度長(zhǎng)的碼字會(huì)平均縮短總長(zhǎng)度(實(shí)際上相當(dāng)于加權(quán)平均),從而達(dá)到壓縮的目的。
什么是24哈夫曼擴(kuò)展編碼?
霍夫曼編碼是一種編碼方法,霍夫曼編碼是一種變字長(zhǎng)編碼(VLC)。Uffman在1952年提出了一種編碼方法,完全根據(jù)字符出現(xiàn)的概率構(gòu)造不同前綴平均長(zhǎng)度最短的碼。字,有時(shí)稱(chēng)為最佳編碼,一般稱(chēng)為霍夫曼編碼。
【基本介紹】
霍夫曼編碼的例子
Huffman樹(shù)是一種加權(quán)路徑長(zhǎng)度最短的最優(yōu)二叉樹(shù),常用于數(shù)據(jù)壓縮。在計(jì)算機(jī)信息處理中霍夫曼編碼與應(yīng)用;"是一種一致的編碼方法(也稱(chēng)為
哈夫曼編碼的函數(shù)怎么寫(xiě)啊,只需要文件讀取和字符識(shí)別部分,謝謝了,跪求???
int main(){ cout-input-endl;int n;cinnfloat * wnew float[n];char * * Hcodenew char *[n];斯特林g * cnew string[n];
for(int i0;在;I){ char a[10];h代碼[I]a;cinh代碼[I]w[I];c[I]h代碼[I];} HuffmanCode(w,n,Hcode);cout-output-ENDL;for(int i1;在;I){ coutc[I-1]Hcode[I]endl;}
Returns 0;
}
前綴編碼怎么判斷?
1.如果要設(shè)計(jì)不同長(zhǎng)度的代碼,其中任何一個(gè)字符的代碼一定不能是另一個(gè)字符的代碼的前綴,稱(chēng)為前綴碼。
2.判斷一個(gè)代碼是不是前綴碼,可以根據(jù)定義,即每個(gè)字符的代碼是否與其他字符代碼前面的數(shù)字相同。
我們要逐個(gè)判斷每個(gè)字符,從A開(kāi)始,A的代碼是0,數(shù)字只有一個(gè)。然后在b、c、d的編碼中,一個(gè)數(shù)從前到后分為1、1、1。1不等于0。那么A的編碼滿(mǎn)足前綴編碼的要求。
4.然后判斷B的代碼是否是其他字母的前綴。B的碼10顯然不是C碼和D碼的前綴,所以B的碼符合前綴編碼的要求。
5.接下來(lái)判斷C的編碼,C碼是110,顯然不是一位碼和兩位碼的前綴。對(duì)于D碼111,不包括從前到后的110。因此,C的編碼符合前綴編碼的要求。
6.最后,判斷d的編碼,同理,C碼從左數(shù)的前三位不等于111,位數(shù)不足的兩位碼就更不用說(shuō)了。因此,D的編碼符合前綴編碼的要求。最后,這四種碼屬于前綴碼。
前綴編碼:是指在對(duì)字符集進(jìn)行編碼時(shí),要求字符集內(nèi)任意字符的編碼不是其他字符的前綴。
擴(kuò)展數(shù)據(jù)的前綴編碼是指在對(duì)一個(gè)字符集進(jìn)行編碼時(shí),要求字符集內(nèi)任意字符的編碼不是其他字符編碼的前綴。比如abcd需要編碼(a0,b10,c110,d11,110的前綴可以是C,也可以是da。,不唯一)
二叉樹(shù):如果左邊的分支代表字符 0 右邊的分支代表字符 1 從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的路徑上的分支串可以用作葉節(jié)點(diǎn)字符的代碼。如此獲得的代碼必須是前綴代碼。
二進(jìn)制前綴代碼,由構(gòu)建霍夫曼樹(shù)的過(guò)程生成?;舴蚵鼧?shù)是一種加權(quán)路徑長(zhǎng)度最短的樹(shù)。
特征:最短的加權(quán)路徑長(zhǎng)度。
ABFACGCAHGBBAACECDFGFAAEABBB
1.統(tǒng)計(jì):A(8)B(6)C(4)D(1)E(2)F(3)G(3)H(1)
2.構(gòu)建霍夫曼樹(shù)
3.獲取霍夫曼代碼
A: 01
B: 11
C: 001
D:00000
E: 0001
F: 100 pounds.
G: 101
H:00001
字符串的新編碼長(zhǎng)度:8*2 6*2 4*3 1*5 2*4 3*3 3*3 1*576。