字首碼判定

2021-10-10 07:52:37 字數 1201 閱讀 8173

解答想法

字首碼:任何乙個字元的編碼都不是同一字符集中另乙個字元的編碼的字首。

請編寫乙個程式,判斷輸入的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.由於哈弗曼樹的資料全在葉...