原文參照:
1.基本概念
節點之間的路徑長度:在樹中從乙個結點到另乙個結點所經歷的分支,構成了這兩個結點間的路徑上的經過的分支數稱為它的路徑長度
樹的路徑長度:從樹的
根節點到樹中每一結點的
路徑長度之和。在結點數目相同的二叉樹中,完全二叉樹的路徑長度最短。
結點的權:在一些應用中,賦予樹中結點的乙個有某種意義的實數。
結點的帶權路徑長度:結點到樹根之間的路徑長度與該結點上權的乘積。
樹的帶權路徑長度(weighted path length of tree:
wpl):定義為樹中所有
葉子結點的帶權路徑長度之和
最優二叉樹是帶權路徑長度最短的二叉樹
2.構造哈夫曼樹的思路
1)給定n個權值分別為的二叉樹,其中每棵二叉樹只有乙個權值為wi 的根節點,其左右子樹都為空;
2)從森林中取出兩棵根節點的權值最小的二叉樹,作為一棵新的二叉樹的左右子樹,且令新的二叉樹的根節點的權值為其左右子樹的權值和;
3)從f中刪除被選中的那兩棵子樹,並且把構成的新的二叉樹加到f森林中
4)重複2 ,3 操作,直到森林只含有一棵二叉樹為止,此時得到的這棵二叉樹就是哈夫曼樹
3.哈夫曼編碼
對一串報文abcdabcaba」進行編碼,可以先統計出a、b、c、d4個字元,出現次數分別為4、3、2、1
將a、b、c、d以出現次數為權值構造哈夫曼樹
從哈夫曼樹根節點開始,對左子樹分配**「0」,對右子樹分配「1」,一直到達葉子節點。
如圖:
a、b、c、d的編碼分別為0、10、110、111
報文「abcdabcaba」轉換為對應的二進位製碼就是0101101110101100100,這就是哈夫曼編碼
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...
哈夫曼編碼 哈夫曼樹
哈夫曼樹是乙個利用權值進行優化編碼的乙個比較奇怪的樹,他的實現比較簡單,用途也比較單一。哈夫曼樹的實現,實現要求 通過哈夫曼樹可以保證在編碼過程中不會出現例如 1000和100這樣的編碼規則,否則就會編碼失敗,因為1000和100在某些情況下的編碼會一模一樣。通過哈夫曼樹可以保證權值大的值進行編碼時...