字首編碼
在電文傳輸中,需要將電文**現的每個字元進行二進位制編碼。在設計編碼時需要遵守兩個原則:(1)傳送方傳輸的二進位制編碼,到接收方解碼後必須具有唯一性,即解碼結果與傳送方傳送的電文完全一樣;(2)傳送的二進位制編碼盡可能地短。下面我們介紹兩種編碼的方式。
1)等長編碼
這種編碼方式的特點是每個字元的編碼長度相同(編碼長度就是每個編碼所含的二進位制位數)。假設字符集只含有4個字元a,b,c,d,用二進位制兩位表示的編碼分別為00,01,10,11。若現在有一段電文為:abaccda,則應傳送二進位制序列:00010010101100,總長度為14位。
當接收方接收到這段電文後,將按兩位一段進行解碼。這種編碼的特點是解碼簡單且具有唯一性,但編碼長度並不是最短的。
2)不等長編碼
在傳送電文時,為了使其二進位制位數盡可能地少,可以將每個字元的編碼設計為不等長的,使用頻度較高的字元分配乙個相對比較短的編碼,使用頻度較低的字元分配乙個比較長的編碼。例如,可以為a,b,c,d四個字元分別分配0,00,1,01,並可將上述電文用二進位制序列:000011010傳送,其長度只有9個二進位制位,但隨之帶來了乙個問題,接收方接到這段電文後無法進行解碼,因為無法斷定前面4個0是4個a,1個b、2個a,還是2個b,即解碼不唯一,因此這種編碼方法不可使用。
(1)利用字符集中每個字元的使用頻率作為權值構造乙個哈夫曼樹;
(2)從根結點開始,為到每個葉子結點路徑上的左分支賦予0,右分支賦予1,並從根到葉子方向形成該葉子結點的編碼假設有乙個電文字符集中有8個字元,每個字元的使用頻率分別為,現以此為例設計哈夫曼編碼。
哈夫曼編碼設計過程為:
(1)為方便計算,將所有字元的頻度乘以100,使其轉換成整型數值集合,得到;
(2)以此集合中的數值作為葉子結點的權值構造一棵哈夫曼樹,如圖所示;
(3)由此哈夫曼樹生成哈夫曼編碼,如圖所示。
最後得出每個字元的編碼為:
比如,傳送一段編碼:0000011011010010,
接收方可以準確地通過解碼得到:⑥⑥⑦⑤②⑧。
赫夫曼二叉樹在通訊編碼中的乙個應用是利用它構造一組最優字首編碼。在某些通訊場合,需將傳送的文字轉換成由二進位制字元組成的字串。
通常有兩類二進位制編碼:一類為等長編碼,這類編碼的二進位制串的長度取決於電文中不同的字元個數,假設需傳送的電文中只有四種字元,只需兩位字元的串便可分辨,但如果電文中可能出現26種不同字元,則等長編碼串的長度
二元最佳字首碼 貪心 最優字首碼
二元字首碼 任何字元的 不能作為其它字元 的字首.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.由於哈弗曼樹的資料全在葉...