判定樹和哈夫曼樹
分類與判定樹
這個小節有個比較重要的概念,就是用於描述分類過程的二叉樹稱爲判定樹
記住即可
哈夫曼樹與哈夫曼算法
首先了解一下什麼是哈夫曼樹
給定一組值p1,…pk,如何構造一棵有k個葉子且分別以這些值爲權的判定樹,使得其平均比較次數最小。滿足上述條件的判定樹稱爲哈夫曼樹。
哈夫曼率先給出了一個求哈夫曼樹的簡單而有效的方法,稱爲哈夫曼算法。
非形式的描述如下
- 給定的值{p1,p2,…,pk}構造森林{T1,T2,Tk},其中每個Ti爲一棵只有根結點且其權爲pi的二叉樹。
- 從F中選取根結點的權最小的兩棵二叉樹Ti和Tj,構造一棵分別以Ti和Tj爲左、右子樹的新的二叉樹Th,置Th根結點的權爲Ti,Tj根結點的權值之和。
- 從F中刪去Ti和Tj,並將Th加入F,若F中仍多於一棵二叉樹,則返回第二步,直到F中只含有一棵二叉樹爲止,這棵樹就是哈夫曼樹。
參照案例
重點來了,看真題,請記住哈夫曼樹不唯一、時刻考慮權值最小
真題參考
動態展示這道題目的解答方法,已經去掉了結點之間的連線
哈夫曼編碼
哈夫曼編碼比較簡單,就是將某棵二叉樹中每個結點的左分支標誌“0”,右分支標誌“1”,這樣,從根到每個葉結點形成“0”/“1”序列,將該序列作爲葉結點對應字符的編碼,由此得到的二進制編碼稱爲哈夫曼編碼。
請讀題
設某通訊系統中一個待傳輸的文本有6個不同字符,它們的出現頻率分別是0.5,0.8,1.4,2.2,2.3,2.8,試設計哈夫曼編碼
教材中給出了樹和哈夫曼編碼,直接看一下即可
出現頻率爲0.5的字符編碼爲1000
出現頻率爲0.8的字符編碼爲1001
出現頻率爲1.4的字符編碼爲101
出現頻率爲2.2的字符編碼爲00
出現頻率爲2.3的字符編碼爲01
出現頻率爲2.8的字符編碼爲11
小結
樹形結構的應用非常廣泛,判定樹和哈夫曼樹可分別用於求解分類問題和有效分類問題以及哈夫曼編碼,哈夫曼編碼算法的關鍵點是:每次合併具有最小權值和次小權值的兩個根結點,直到只剩下一個根結點爲止。
對哈夫曼樹的每個結點的左分支和右分支分別置“0”或“1”,就可得到哈夫曼編碼。