哈夫曼樹和哈夫曼編碼

2021-07-22 20:19:25 字數 700 閱讀 7814

在一般的資料結構的書中,樹的那章後面,著者一般都會介紹一下哈夫曼(huffman)樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的乙個應用。哈夫曼編碼應用廣泛,如jpeg中就應用了哈夫曼編碼。 首先介紹什麼是哈夫曼樹。哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的權值乘上其到根結點的 路徑長度(若根結點為0層,葉結點到根結點的路徑長度為葉結點的層數)。樹的帶權路徑長度記為wpl= (w1*l1+w2*l2+w3*l3+...+wn*ln),n個權值wi(i=1,2,...n)構成一棵有n個葉結點的二叉樹,相應的葉結點的路徑長度為li(i=1,2,...n)。可以證明哈夫曼樹的wpl是最小的。

哈夫曼編碼步驟:

一、對給定的n個權值構成n棵二叉樹的初始集合f= ,其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。(為方便在計算機上實現算 法,一般還要求以ti的權值wi的公升序排列。)

二、在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。

三、從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到集合f中。

四、重複二和三兩步,直到集合f中只有一棵二叉樹為止。

如果權重集合f=,那麼過程就是,先取兩個最小的數:1,2構成乙個樹3',放到集合中,那麼此時f=,再取3,3構成樹6',f=,取4,5構成乙個樹9',最後f= 這兩棵樹進行合併,就得到的一棵哈夫曼樹

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...

哈夫曼編碼 哈夫曼樹

哈夫曼樹是乙個利用權值進行優化編碼的乙個比較奇怪的樹,他的實現比較簡單,用途也比較單一。哈夫曼樹的實現,實現要求 通過哈夫曼樹可以保證在編碼過程中不會出現例如 1000和100這樣的編碼規則,否則就會編碼失敗,因為1000和100在某些情況下的編碼會一模一樣。通過哈夫曼樹可以保證權值大的值進行編碼時...