解答想法
字首碼:任何乙個字元的編碼都不是同一字符集中另乙個字元的編碼的字首。
請編寫乙個程式,判斷輸入的n個由1和0組成的編碼是否為字首碼。如果這n個編碼是字首碼,則輸出"yes」;否則輸出第乙個與前面編碼發生矛盾的編碼。
第1行為n(表示下面有n行編碼)
第2~n+1行為n個由0或1組成的編碼
判斷結果
測試樣例1
5
0001
10110
111
yes
測試樣例2
5
0001
10110
11
11
測試樣例3
5
0001
1011
111
111
測試樣例4
5
111110
1001
00
yes
測試樣例5
8
00010
0110
0111
10110
1110
1111
yes
測試樣例6
8
00010
0110
0111
1011
1110
111
1110
#include
using
namespace std;
struct btreenode
;int
main()
else
}else
else}}
else
else
}else
else}}
}}cout <<
"yes"
<< endl;
return0;
}
本題的精髓在於構建哈夫曼樹來判定是否有重複的二叉樹路徑
哈夫曼樹構建
二元最佳字首碼 貪心 最優字首碼
二元字首碼 任何字元的 不能作為其它字元 的字首.eg.q 不是二元字首 如序列0100001會產生歧義 設c 是n個字元的集合,f xi 為xi出現的頻率,d xi 為xi的碼長,i 1,2,n.儲存乙個字元的平均二進位制位數 碼數 b sum limits f x i d x i 每個二元字首碼...
最優字首碼問題
構造最優字首碼的貪心演算法就是哈夫曼演算法 哈夫曼編碼 對於一顆具有n個葉子的哈夫曼樹,若對樹中的每個左分支賦予0,右分支賦予1,則從根到每個葉子的路徑上,各分支的賦值分別構成乙個二進位制串,該二進位制串就成為哈夫曼編碼。哈夫曼樹滿足兩條性質 性質證明如下 參考自 嚴蔚敏 資料結構教材 q c 頻率...
最優字首碼問題
1.問題 給定字符集c 和每個字符集的頻率f xi 求關於c的乙個最優字首碼。2.解析 構造最優字首碼的貪心演算法就是哈夫曼演算法 huffman 構建哈夫曼樹的過程 1.按照貪心演算法每次找權值最小 即值最小 的兩個數,構成孩子結點,並將這兩個資料排除出這一堆資料之外 2.由於哈弗曼樹的資料全在葉...