哈夫曼編碼是一種可變長度編碼方式,其編碼總體思路為對于使用頻率高的字母分配較短的編碼,對于使用頻率較低的字符分配較長的編碼,從而提高壓縮效率?,F(xiàn)用以下實例說明其編碼思想:
現(xiàn)有一串字符串只包含A、B、C、D、E共5種字母,先統(tǒng)計出5個字母在字符串中的使用頻率,現(xiàn)假定頻率如表格所示。
字符 |
A |
B |
C |
D |
E |
頻率 |
35% |
17% |
26% |
13% |
9% |
然后,開始以頻率作為權值構(gòu)造哈夫曼樹,方法如下:
①將每個字符排成一-排,并標注權值,每個字符都是一個葉子節(jié)點。
②找出權值最小的兩個節(jié)點,其中權值較小的節(jié)點作為左分支,較大的作為右分支,把它們合并成一個父節(jié)點,就產(chǎn)生了一顆二叉樹。父節(jié)點的權值是合成它的兩個節(jié)點的權值之和,并為其左分支節(jié)點分配編碼“0”,右分支節(jié)點分配編碼“1“。該父節(jié)點可以與其余未被合成過的節(jié)點繼續(xù)合并。
③重復步驟②,直至所有節(jié)點合并完成一顆二叉樹如圖a所示。
④一個字母的編碼就是從根節(jié)點開始沿著各分支到達該字母所經(jīng)過路徑上各編碼的順序排列,如圖b所示。
小明在學習了數(shù)據(jù)結(jié)構(gòu)相關知識后編寫python程序模擬哈夫曼編碼過程,程序運行結(jié)果如圖C所示。請回答以下問題:
(1)若某段僅包含a、b、c、d、e的字符串中各字母的出現(xiàn)頻率依次為23,20,36,9,12,則用哈夫曼編碼字母d的代碼為
。
(2)實現(xiàn)上述功能的python程序如下,請在橫線處填入合適的代碼。