哈夫曼編碼碼長怎麼算,霍夫曼編碼的平均碼長怎麼求

時間 2021-10-30 05:48:26

1樓:墨汁遊戲

假設用於通訊的電文由字符集中的字母構成,這8個字母在電文**現的概率分別為。

哈夫曼編碼 根據上面可得編碼表:  a:1001  b:

01  c:10111  d:1010  e:

11  f:10110  g:00  h:

1000

用三位二進行數進行的等長編碼平均長度為3,而根據哈夫曼樹編碼的平均碼長為:4*0.07+2*0.

19+5*0.02+4*0.06+2*0.

32+5*0.03+2*0.21+4*0.

10=2.61  2.61/3=0.

87=87%其平均碼長是等長碼的87%,所以平均壓縮率為13%。

因為定長編碼已經用相同的位數這個條件保證了任一個字元的編碼都不會成為其它編碼的字首,所以這種情況只會出現在變長編碼當中,要想避免這種情況,

就必須用一個條件來制約定長編碼,這個條件就是要想成為壓縮編碼,變長編碼就必須是字首編碼,所謂的字首編碼就是任何一個字元的編碼都不能是另一個字元編碼的字首。

2樓:琬若晨曦

介紹一個不用構造哈夫曼樹的方法來計算哈夫曼編碼的長度的演算法,本演算法的時間複雜度為o(nlogn),空間複雜度為o(n)。下面是具體**。

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define buff_size 4096

#define hash_size 256

char buff[buff_size];        //緩衝區

int  hash[hash_size];        //統計每個字元出現的次數

int heap[(hash_size<<1)+2];

int pos[hash_size+1][3];//內部節點 , 0和1記錄子結點位置,3節錄當前的深度

int tlen[hash_size+1];        //記錄每個葉子結點的深度

int  fd;                      //檔案描述符

int sym_num ;           //檔案**現的符號數量

int sum(0);              //檔案中字元總數

//初始化程式

void init(const char * pathname)

}//統計檔案中每個符號出現的次數

void count_symbol()

//記錄出現的符號數量;

for(int i = hash_size - 1; i >= 0; i--)

if(hash[i])sym_num++;

}//建立一個最小堆

void build_min_heap()}}

//每次取出最小數之後重新調整堆,

//h 指推中元素的個數

void heap_adjust(int h)

//統計編碼長度 , 線性時間統計

int ts = sym_num << 1;

for(int i=2;i<=sym_num;i++)

}int main()

{init("data.dat");

count_symbol();

huff_length();

unsigned int sum = 0;

for(int i=1;i<=sym_num;i++)

sum += tlen[i] * heap[sym_num + i];

cout<

3樓:城哥生活

通過網際網路來計算最好了,通過公愛計算比較多

霍夫曼編碼的平均碼長怎麼求

4樓:格子裡兮

霍夫曼編碼是變長編碼,思路:對概率大的編的碼字短,概率小的編的碼字長專,這樣一來所編的屬總碼長就小,這樣編碼效率就高。

上面那樣求是不對的,除非你這6個碼字是等概率的,各佔1/6。應該用對應的概率*其對應得碼長,再求和。

5樓:匿名使用者

霍夫曼復編碼是變長編碼,制思路:對概

bai率大的編的碼字短,概率du小的編的碼字長zhi

,這dao樣一來所編的總碼長就小,這樣編碼效率就高。你上面那樣求是不對的,除非你這6個碼字是等概率的,各佔1/6。應該用對應的概率*其對應得碼長,再求和。

6樓:霜之亡魂

顯然不來是這麼除

你寫出哈夫

自曼樹是要依據碼

出現的bai概率

然後給各種du碼對應

zhi上這種編碼

平均碼dao長就是該碼出現的概率乘以現在的碼長的和就拿你這個舉例

01 10 11 000 0010 0011設概率分別為

0.2 0.2 0.2 0.16 0.12 0.12那麼平均碼長

0.2×2+0.2×2+0.2×2+0.16×3+0.12×4+0.12×4

7樓:匿名使用者

仔細查了一下書,平均碼長=碼長×碼字出現的概率。

見《資訊理論與編碼理論》(高教王育民版)

哈夫曼編碼原理

喵喵喵啊 赫夫曼碼的碼字 各符號的 是異前置碼字,即任一碼字不會是另一碼字的前面部分,這使各碼字可以連在一起傳送,中間不需另加隔離符號,只要傳送時不出錯,收端仍可分離各個碼字,不致混淆。哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提...

設某哈夫曼樹中有結點,則該哈夫曼樹中有 個葉子結點

痴情鐲 設某哈夫曼樹中有199個結點,則該哈夫曼樹中有100個葉子結點。給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。哈夫曼編碼 哈夫曼靜態編碼...

求C語言C 高手賜教額關於哈夫曼樹的程式急求一定要可以執行的噢

說實話,哈夫曼樹的編碼有點難度,這個 是我花了三四個小時寫的,不能完全滿足你的要求,但是可以進行哈夫曼編碼,你試著向你題目的要求改一下吧。include include define n 5 define m 2 n 1 typedef struct hf node htnode typedef s...