給定權值怎么構造哈夫曼樹 怎樣求哈夫曼樹的平均編碼長?怎樣求哈夫曼樹?
怎樣求哈夫曼樹的平均編碼長?怎樣求哈夫曼樹?假設用于通信2113的消息由字符集{a、B、C、D、e、F、G、H}中的5261個字母組成,消息中出現(xiàn)這八個字母的概率為4102,即{0.07、0.19、0
怎樣求哈夫曼樹的平均編碼長?怎樣求哈夫曼樹?
假設用于通信2113的消息由字符集{a、B、C、D、e、F、G、H}中的5261個字母組成,消息中出現(xiàn)這八個字母的概率為4102,即{0.07、0.19、0.02、0.06、0.32、0.03、0.21、0.10}。哈夫曼碼1653可以從上面的編碼表中得到:A:1001 B:01 C:10111 D:1010 e:11 F:10110 G:00 h:1000,三位二進制等長編碼的平均長度為3,哈夫曼樹編碼的平均長度為4*0.07 2*0.19 5*0.02 4*0.06 2*0.32 5*0.03 2*0.21 4*0.10=2.61 2.61/3=0.87%,平均碼長為等長碼的87%,平均壓縮比為13%。由于定長碼已經使用了相同的位數(shù),這個條件保證了任何字符的碼都不會成為其他碼的前綴,所以這種情況只發(fā)生在變長碼中,我們必須用一個條件來制作常規(guī)長度碼。這個條件是,如果我們想成為壓縮碼,可變長度的代碼必須是前綴碼。所謂前綴碼,是指任何一個字符的編碼不能是另一個字符編碼的前綴。
怎樣求哈夫曼樹的平均編碼長度?
創(chuàng)建一個結構數(shù)組,每個成員都有一個指向結構的指針,左,右,權重值。隨機初始化值。將每個節(jié)點的左側和右側設置為null。從陣列中隨機選取三個節(jié)點,讓其中一個節(jié)點的左右兩側分別指向另外兩個節(jié)點。等等。(節(jié)點是否被使用,要自己判斷,頂點也要自己記住。數(shù)組應該是奇數(shù)(有一個結束節(jié)點,需要2N-1個節(jié)點)。用指針查找路徑的長度,從節(jié)點開始,直到指針為空。
哈夫曼樹怎樣構造編碼?
首先構造了哈夫曼樹,并給出了哈夫曼樹的構造規(guī)則:假設有n個權值,構造的哈夫曼樹有n個葉節(jié)點。N個權值設為W1,W2哈夫曼樹的構造規(guī)則如下:(1)W1,W2(2)在林中選取根節(jié)點權值最小的兩棵樹,合并為一棵新樹的左右子樹,新樹的根節(jié)點的權重是其左右子樹的根節(jié)點的權重之和;(3)從林中刪除所選的兩棵樹,并將新樹添加到林中;(4)重復步驟(2)和(3),直到林中只剩下一棵樹。構造完成后,從樹的根節(jié)點開始,默認的左子樹為0,右子樹為1,直到葉節(jié)點。葉節(jié)點的代碼是必需的代碼。例如,ABCDEF的權重是812520411,哈夫曼樹是:60/2337//f(11)B(12)17D(20)/a(8)9/e(4)C(5)編碼是:a:100,B:01,C:1011,D:11,e:1010,f:00