作業14 Huffman樹及其應用 防止標題重複

2021-10-11 18:55:37 字數 2698 閱讀 6680

1-1

對n(≥2)個權值均不相同的字元構造哈夫曼樹,

則樹中任一非葉結點的權值一定不小於下一層任一結點的權值。(t)

[解析]我會想到 這個序列 , 第一次構造的結點的權值確實小於但是

之後是 2和3 構造結點,之後是 5和5 構造結點,所以還是符合條件的

2-1對n(n≥2)個權值均不相同的字元構造哈夫曼樹。

下列關於該哈夫曼樹的敘述中,錯誤的是:(d)

a.樹中一定沒有度為1的結點

b.樹中兩個權值最小的結點一定是兄弟結點

c.樹中任一非葉結點的權值一定不小於下一層任一結點的權值

d.該樹一定是一棵完全二叉樹

2-2設一段文字中包含字元,其出現頻率相應為。

則經過哈夫曼編碼後,文字所佔位元組數為:()

a.40

b.36

c.25

d.12

[解析]求得huffman編碼後,所佔位元組數 = ∑(頻率 * 其編碼長度)

2-3設一段文字中包含4個物件,其出現次數相應為,

則該段文字的哈夫曼編碼比採用等長方式的編碼節省了多少位數?(b)

a.0b.2

c.4d.5

[解析]求huffman編碼後佔的位數,與等長的做差

2-5已知字符集。若各字元的哈夫曼編碼依次是

0100, 10, 0000, 0101, 001, 011, 11, 0001,則編碼序列 0100011001001011110101

的解碼結果是:(d)

a.acgabfh

b.adbagbb

c.afbeagd

d.afeefgd

[解析]huffman編碼是字首碼,可以唯一確定序列

2-6若以{4,5,6,3,8}作為葉子節點的權值構造哈夫曼樹,則帶權路徑長度是()。(d)

a.28

b.68

c.55

d.59

2-7下列敘述錯誤的是()。(b)

a.一棵哈夫曼樹的帶權路徑長度等於其中所有分支結點的權值之和

b.當一棵具有n 個葉子結點的二叉樹的wpl 值為最小時,稱其樹為哈夫曼樹,其二叉樹的形狀是唯一的

c.哈夫曼樹是帶權路徑長度最短的樹,路徑上權值較大的結點離根較近

d.哈夫曼樹的結點個數不能是偶數

[解析]之前的部落格有相關的解釋

7-3 哈夫曼編碼 (30分)

給定一段文字,如果我們統計出字母出現的頻率,是可以根據哈夫曼演算法給出一套編碼,

使得用此編碼壓縮原文可以得到最短的編碼總長。然而哈夫曼編碼並不是唯一的。

例如對字串"aaaxuaxz",容易得到字母 『a』、『x』、『u』、『z』 的出現頻率對應為

4、2、1、1。我們可以設計編碼 ,也可以用另一套

,還可以用 ,

三套編碼都可以把原文壓縮到 14 個位元組。但是

就不是哈夫曼編碼,因為用這套編碼壓縮得到 00001011001001 後,解碼的結果不唯一,

「aaaxuaxz」 和 「aazuaxax」 都可以對應解碼的結果。本題就請你判斷任一套編碼是否

哈夫曼編碼。

輸入格式:

首先第一行給出乙個正整數 n(2≤n≤63),隨後第二行給出 n 個不重複的字元及其出現頻率,格式如下:

c[1] f[1] c[2] f[2] … c[n] f[n]

其中c[i]是集合中的字元;f[i]是c[i]的出現頻率,為不超過 1000 的整數。再下一行給出乙個正整數 m(≤1000),隨後是 m 套待檢的編碼。每套編碼佔 n 行,格式為:

c[i] code[i]

其中c[i]是第i個字元;code[i]是不超過63個』0』和』1』的非空字串。

輸出格式:

對每套待檢編碼,如果是正確的哈夫曼編碼,就在一行中輸出"yes",否則輸出"no"。

注意:最優編碼並不一定通過哈夫曼演算法得到。任何能壓縮到最優長度的字首編碼

都應被判為正確。

int

main()

//getchar();

huffmantree ht;

huffmancoding

(ht, f, n)

;//得到這個huffman樹的帶權路徑長度

int wpl =0;

for(

int i =

1; i <=

2* n -

1; i++

)//cout << wpl << endl;

// string code[65]

;int m;

cin >> m;

getchar()

;while

(m--

)//最短路徑大於wpl

if(this_solution_weight > wpl)

//判斷是否是字首編碼

int flag =0;

for(

int i =

1; i <= n; i++)}

else

if(code[i]

== code[j])}

}if(flag ==1)

cout <<

"no"

<< endl;

else

cout <<

"yes"

<< endl;

}//system("pause");

return0;

}

Huffman樹及其應用

最優二叉樹 赫夫曼樹 路 徑 由一結點到另一結點間的分支所構成。路徑長度 路徑上的分支數目。a e的路徑長度 2 樹的路徑長度 從樹根到每一結點的路徑長度之和。樹長度 10 結點的權 一些應用中,賦予樹中結點的乙個有某種意義的實數。帶權路徑長度 結點到根的路徑長度與結點上權的乘積。樹的帶權路徑長度 ...

資料結構入門 赫夫曼Huffman樹及其應用

路 徑 由一結點到另一結點間的分支所構成。路徑長度 路徑上的分支數目。a e的路徑長度 2 樹的路徑長度 從樹根到每一結點的路徑長度之和。樹長度 10 帶權路徑長度 結點到根的路徑長度與結點上權的乘積。樹的帶權路徑長度 樹中所有葉子結點的帶權路徑長度之和。哈 夫 曼 樹 帶權路徑長度最小的二叉樹。h...

正規化Huffman樹在檔案壓縮專案中的應用

正規化huffman樹不用建立,可以利用huffman樹推到出來 壓縮 通過huffman碼表推算出每個字元的正規化huffman編碼 讀取原始檔,將原始檔中的每個位元組按照對應的正規化huffman編碼進行改寫 壓縮檔案的格式 解壓縮 從壓縮資料中獲取符號的編碼位長,構建符號位長表 根據編碼位長建...