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編碼進行改寫 壓縮檔案的格式 解壓縮 從壓縮資料中獲取符號的編碼位長,構建符號位長表 根據編碼位長建...