閒來無事,工作間隙開開小差,翻了下桌子旁的《計算機演算法設計與實現》,隨機翻到了哈夫曼樹和哈夫曼演算法這一段
就來簡單的談下我對哈夫曼演算法的理解
字首碼編碼
完全二叉樹
路徑節點
權值簡單概率
其中,n表示葉子結點的數目,wi和li分別表示葉子結點ki的權值和樹根結點到葉子結點ki之間的路徑長度。
赫夫曼樹(哈夫曼樹,huffman樹)定義:
在權為w1,w2,…,wn的n個葉子結點的所有二叉樹中,帶權路徑長度wpl最小的二叉樹稱為赫夫曼樹或最優二叉樹。
最小的耗時最小,即演算法的複雜度最低,o(n)最小(人類總是希望重複的勞動少幹,最少懶人是這樣想的)
好了,現在我們可以舉乙個例子:
例:有4 個結點 a, b, c, d,權值分別為 7, 5, 2, 4,試構造以此 4 個結點為葉子結點的二叉樹。
哈夫曼樹就是最優二叉樹的最優解
哈夫曼樹:
滿足完全二叉樹的條件即為哈夫曼樹,哈夫曼演算法最先要經過以下幾個步驟:
1 先要構造出哈夫曼樹
2 從哈夫曼樹中找到最優解(即哈夫曼演算法)
3 構造好的最優解進行哈夫曼編碼
4 編碼後應用實戰
**例子就不舉例了,隨便什麼語言都行
哈夫曼樹和哈夫曼演算法
1 最優二叉樹 具有最小加權路徑長度的二叉樹 2 哈夫曼演算法 由哈夫曼給出,用於構造最優二叉樹的演算法 3 哈夫曼樹 用哈夫曼演算法構造的最優二叉樹 4 哈夫曼演算法 很熟,所以就略了 5 函式createhfmtree的步驟 首先,構造n棵哈夫曼樹的物件,每棵樹只有乙個權值為w i 的根節點,且...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...