日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文看懂哈夫曼树与哈夫曼编码

發(fā)布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文看懂哈夫曼树与哈夫曼编码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html

在一般的數(shù)據(jù)結(jié)構(gòu)的書中,樹的那章后面,著者一般都會介紹一下哈夫曼(HUFFMAN)樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的一個應(yīng)用。哈夫曼編碼應(yīng)用廣泛,如JPEG中就應(yīng)用了哈夫曼編碼。 首先介紹什么是哈夫曼樹。哈夫曼樹又稱最優(yōu)二叉樹,是一種帶權(quán)路徑長度最短的二叉樹。所謂樹的帶權(quán)路徑長度,就是樹中所有的葉結(jié)點的權(quán)值乘上其到根結(jié)點的 路徑長度(若根結(jié)點為0層,葉結(jié)點到根結(jié)點的路徑長度為葉結(jié)點的層數(shù))。樹的帶權(quán)路徑長度記為WPL= (W1*L1+W2*L2+W3*L3+…+Wn*Ln),N個權(quán)值Wi(i=1,2,…n)構(gòu)成一棵有N個葉結(jié)點的二叉樹,相應(yīng)的葉結(jié)點的路徑長度為Li(i=1,2,…n)。可以證明哈夫曼樹的WPL是最小的。

哈夫曼編碼步驟:

一、對給定的n個權(quán)值{W1,W2,W3,…,Wi,…,Wn}構(gòu)成n棵二叉樹的初始集合F= {T1,T2,T3,…,Ti,…,Tn},其中每棵二叉樹Ti中只有一個權(quán)值為Wi的根結(jié)點,它的左右子樹均為空。(為方便在計算機上實現(xiàn)算 法,一般還要求以Ti的權(quán)值Wi的升序排列。)
二、在F中選取兩棵根結(jié)點權(quán)值最小的樹作為新構(gòu)造的二叉樹的左右子樹,新二叉樹的根結(jié)點的權(quán)值為其左右子樹的根結(jié)點的權(quán)值之和。
三、從F中刪除這兩棵樹,并把這棵新的二叉樹同樣以升序排列加入到集合F中。
四、重復(fù)二和三兩步,直到集合F中只有一棵二叉樹為止。

簡易的理解就是,假如我有A,B,C,D,E五個字符,出現(xiàn)的頻率(即權(quán)值)分別為5,4,3,2,1,那么我們第一步先取兩個最小權(quán)值作為左右子樹構(gòu)造一個新樹,即取1,2構(gòu)成新樹,其結(jié)點為1+2=3,如圖:

虛線為新生成的結(jié)點,第二步再把新生成的權(quán)值為3的結(jié)點放到剩下的集合中,所以集合變成{5,4,3,3},再根據(jù)第二步,取最小的兩個權(quán)值構(gòu)成新樹,如圖:

再依次建立哈夫曼樹,如下圖:

其中各個權(quán)值替換對應(yīng)的字符即為下圖:

所以各字符對應(yīng)的編碼為:A->11,B->10,C->00,D->011,E->010

霍夫曼編碼是一種無前綴編碼。解碼時不會混淆。其主要應(yīng)用在數(shù)據(jù)壓縮,加密解密等場合。

總結(jié)

以上是生活随笔為你收集整理的一文看懂哈夫曼树与哈夫曼编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。