最優二叉樹(赫夫曼樹)
路 徑:
由一結點到另一結點間的分支所構成。
路徑長度:
路徑上的分支數目。
a→e的路徑長度=2
樹的路徑長度:
從樹根到每一結點的路徑長度之和。
樹長度=10
結點的權:
一些應用中,賦予樹中結點的乙個有某種意義的實數。
帶權路徑長度:
結點到根的路徑長度與結點上權的乘積。
樹的帶權路徑長度:
樹中所有葉子結點的帶權路徑長度之和。
赫 夫 曼 樹:
帶權路徑長度最小的樹。
huffman樹的構造
構造赫夫曼樹的基本思想:
權值大的結點用短路徑,權值小的結點用長路徑。
構造huffman
樹的步驟(即
huffman
演算法):
(1)由給定的
n 個權值
,構造具有
n 棵二叉樹
的集合f
= ,其中
每棵二叉樹 ti
中只有一
個帶權為 wi
的根結點
,其左、右子樹均為空。
(2) 在 f 中選取兩棵根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為其左、右子樹上根結點的權值之和。 (3) 在 f 中刪除這兩棵樹,同時將新得到的二叉樹加入f中。
(4) 重複(2)和(3), 直到 f 只含一棵樹為止。這棵樹便是赫夫曼樹。
構造huffman樹的步驟:
操作要點1:對權值的合併、刪除與替換 ——在權值集合中,總是合併當前值最小的兩個權
操作要點2:按左0右1對huffman樹的所有分支編號!
特點:每一碼都不是另一碼的字首,絕不會錯譯! 稱為字首碼
字首編碼:指的是,任何乙個字元的編碼都不是同一字符集中另乙個字元的編碼的字首。
字首編碼保證了在解碼時不會有多種可能。
huffman編碼:
利用赫夫曼樹可以構造一種不等長的二進位制編碼,並且構造所得的赫夫曼編碼是一種最優字首編碼,即使所傳電文的總長度最短。
赫夫曼編碼的基本思想是:
概率大的字元用短碼,概率小的用長碼。由於赫夫曼樹的wpl最小,說明編碼所需要的位元數最少。這種編碼已廣泛應用於網路通訊中。
例如:
假設用於通訊的電文僅由8個字母 構成,它們在電文中出現的概率分別為,試為這8個字母設計哈夫曼編碼。如果用0~7的二進位制編碼方案又如何?
解:先將概率放大100倍,以方便構造哈夫曼樹。權值集合 w=, 按哈夫曼樹構造規則(合併、刪除、替換),可得到哈夫曼樹。
資料結構學習 Huffman樹及其應用
huffman樹又叫最優樹,是一類帶權路徑長度最短的樹,有著廣泛的應用。1 最優二叉樹 從樹中乙個節點到另乙個結點之間的分支構成這兩個結點之間的路徑,路徑上的分支數目稱做路徑長度。樹的路徑長度是從樹根到每乙個結點的路徑長度之和。結點的帶權路徑長度為從該節點到樹根之間的路徑長度與節點上權的乘積,樹的帶...
作業14 Huffman樹及其應用 防止標題重複
1 1 對n 2 個權值均不相同的字元構造哈夫曼樹,則樹中任一非葉結點的權值一定不小於下一層任一結點的權值。t 解析 我會想到 這個序列 第一次構造的結點的權值確實小於但是 之後是 2和3 構造結點,之後是 5和5 構造結點,所以還是符合條件的 2 1對n n 2 個權值均不相同的字元構造哈夫曼樹。...
Huffman樹與Huffman編碼
一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...