精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原以為哈夫曼樹、哈夫曼編碼很難,結果……

開發 前端
哈夫曼樹、哈夫曼編碼很多人可能聽過,但是可能并沒有認真學習了解,今天這篇就比較詳細的講一下哈夫曼樹。

[[405958]]

哈夫曼樹介紹

大家好,我是bigsai。原以為哈夫曼樹、哈夫曼編碼很難,結果它很簡單啊老鐵們!

哈夫曼樹、哈夫曼編碼很多人可能聽過,但是可能并沒有認真學習了解,今天這篇就比較詳細的講一下哈夫曼樹。

首先哈夫曼樹是什么?

哈夫曼樹的定義:給定N個權值作為N個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree),哈夫曼樹是帶權路徑長度最短的樹。權值較大的結點離根較近。

那這個樹長啥樣子呢?例如開始2,3,6,8,9權值節點構成的哈夫曼樹是這樣的:

從定義和圖上你也可以發現下面的規律:

  • 初始節點都在樹的葉子節點上
  • 權值大的節點離根更近
  • 每個非葉子節點都有兩個孩子(因為我們自下向上構造,兩個孩子構成一個新樹的根節點)

你可能會好奇這么一個哈夫曼樹是怎么構造的,其實它是按照一個貪心思想和規則構造,而構造出來的這個樹的權值最小。這個規則下面會具體講解。

哈夫曼樹非常重要的一點:WPL(樹的所有葉結點的帶權路徑長度之和)。至于為什么按照哈夫曼樹方法構造得到的權重最小,這里不進行證明,但是你從局部來看(三個節點)也要權值大的在上一層WPL才更低。

WPL計算方法: WPL=求和(Wi * Li)其中Wi是第i個節點的權值(value)。Li是第i個節點的長(深)度.

例如上面 2,3,6,8,9權值節點構成的哈夫曼樹的WPL計算為(設根為第0層):

比如上述哈夫曼樹的WPL為:2*3+3*3+6*2+8*2+9*2=(2+3)*3+(6+8+9)*2=61.

既然了解了哈夫曼樹的一些概念和WPL的計算方式,下面看看哈夫曼樹的具體構造方式吧!

哈夫曼樹構造

初始給一個森林有n個節點。我們主要使用貪心的思想來完成哈夫曼樹的構造:

  • 在n個節點找到兩個最小權值節點(根),兩個為葉子結構構建一棵新樹(根節點權值為左右孩子權值和)
  • 先刪掉兩個最小節點(n-2)個,然后加入構建的新節點(n-1)個
  • 重復上面操作,一直到所有節點都被處理

在具體實現上,找到最小兩個節點需要排序操作,我們來看看2,6,8,9,3權值節點構成哈夫曼樹的過程。

初始時候各個節點獨立,先將其排序(這里使用優先隊列),然后選兩個最小節點(拋出)生成一個新的節點,再將其加入優先隊列中,此次操作完成后優先隊列中有5,6,8,9節點

重復上面操作,這次結束 隊列中有11,8,9節點(排序后8,9,11)

圖片如果隊列為空,那么返回節點,并且這個節點為整個哈夫曼樹根節點root。

否則繼續加入隊列進行排序。重復上述操作,直到隊列為空。

在計算帶權路徑長度WPL的時候,需要重新計算高度(從下往上),因為哈夫曼樹是從下往上構造的,并沒有以常量維護高度,可以構造好然后計算高度。

具體代碼實現(僅供參考)

  1. import java.util.ArrayDeque; 
  2. import java.util.ArrayList; 
  3. import java.util.Comparator; 
  4. import java.util.List; 
  5. import java.util.PriorityQueue; 
  6. import java.util.Queue; 
  7.  
  8. public class HuffmanTree {     
  9.     public static class node 
  10.     { 
  11.         int value; 
  12.         node left
  13.         node right
  14.         int deep;//記錄深度 
  15.         public node(int value) { 
  16.             this.value=value; 
  17.             this.deep=0; 
  18.         } 
  19.         public node(node n1, node n2, int value) { 
  20.             this.left=n1; 
  21.             this.right=n2; 
  22.             this.value=value; 
  23.         } 
  24.     } 
  25.     private node root;//最后生成的根節點 
  26.     List<node>nodes; 
  27.     public HuffmanTree() { 
  28.         this.nodes=null
  29.     } 
  30.     public HuffmanTree(List<node>nodes) 
  31.     { 
  32.         this.nodes=nodes; 
  33.     } 
  34.     public void createTree() { 
  35.        Queue<node>q1=new PriorityQueue<node>(new Comparator<node>() { 
  36.       public int compare(node o1, node o2) { 
  37.         return o1.value-o2.value; 
  38.       }}); 
  39.        q1.addAll(nodes); 
  40.        while(!q1.isEmpty()){ 
  41.            node n1=q1.poll(); 
  42.            node n2=q1.poll(); 
  43.           node parent=new node(n1,n2,n1.value+n2.value); 
  44.           if(q1.isEmpty()){ 
  45.               root=parent;return
  46.           } 
  47.           q1.add(parent); 
  48.        } 
  49.     } 
  50.     public int getweight() { 
  51.         Queue<node>q1=new ArrayDeque<node>(); 
  52.         q1.add(root); 
  53.         int weight=0; 
  54.         while (!q1.isEmpty()) { 
  55.             node va=q1.poll(); 
  56.             if(va.left!=null){ 
  57.                 va.left.deep=va.deep+1;va.right.deep=va.deep+1; 
  58.                 q1.add(va.left);q1.add(va.right); 
  59.             } 
  60.             else { 
  61.                 weight+=va.deep*va.value; 
  62.             } 
  63.         } 
  64.         return weight; 
  65.     } 
  66.     public static void main(String[] args) { 
  67.         List<node>list=new ArrayList<node>(); 
  68.         list.add(new node(2)); 
  69.         list.add(new node(3)); 
  70.         list.add(new node(6)); 
  71.         list.add(new node(8));list.add(new node(9)); 
  72.         HuffmanTree tree=new HuffmanTree(); 
  73.         tree.nodes=list; 
  74.         tree.createTree(); 
  75.         System.out.println(tree.getweight()); 
  76.     } 

輸出結果:

  1. 61 

哈夫曼編碼

除了哈夫曼樹你聽過,哈夫曼編碼你可能也聽過,但是不一定了解它是個什么玩意兒,哈夫曼編碼其實就是哈夫曼樹的一個非常重要的應用,在這里就簡單介紹原理并不詳細實現了。

哈夫曼編碼定義:哈夫曼編碼(Huffman Coding),又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼(VLC)的一種。Huffman于1952年提出一種編碼方法,該方法完全依據字符出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做Huffman編碼(有時也稱為霍夫曼編碼)。

哈夫曼編碼的目的是為了減少存儲體積,以一個連續的字符串為例,拋開編程語言中實際存儲,就拿

aaaaaaaaaabbbbbcccdde

這個字符串來說,在計算機中如果每個字符都是定長存儲(假設長為4的二進制存儲),計算機只知道0和1的二進制,假設

  1. a:0001 
  2. b:0010 
  3. c:0011 
  4. d:0100 
  5. e:0101 

那么上面字符串可以用二進制存儲是這樣的

000100010001000100010001……0101

如果每個字符編碼等長,那么就沒有存儲空間優化可言,都是單個字符長度 * 字符個數。但是如果每個字符編碼不等長,那么設計的開放性就很強了。

比如一個字符串aaaaabb

如果設計a為01,b設計為1。那么二進制就為:010101010111

如果設計a為1,b設計為01。那么二進制就為:111110101

如果設計a為1,b設計為0。那么二進制就為:1111100

你看,在計算機的01二進制世界中,明顯第二種比第一種優先,第三種又比第二種優先。所以,設計編碼要考慮讓出現多的盡量更短,出現少的稍微長點沒關系。

但是,你需要考慮的一個問題是,二進制開始0,1,01,10,11這個順序 ,如果來了001它到底是0,0,1還是0,01呢?所以編碼不等長的時候你要考慮到這個編碼要有唯一性不能出現歧義。這個怎么搞呢?

簡單啊,計算機只知道01二進制,而二叉樹剛好有左右兩個節點,至于一個字符它如果是對應葉子節點,那么就可以直接確定,也就是這個數值如果映射成一個二叉樹字符不能存在非葉子節點上。

所以,哈夫曼編碼具體流程就很清晰了,先統計字符出現的次數,然后將這個次數當成權值按照上面介紹的方法構造一棵哈夫曼樹,然后樹的根不存,往左為0往右為1每個葉子節點得到的二進制數字就是它的編碼,這樣頻率高的字符在上面更短在整個二進制存儲中也更節省空間。

結語

 

哈夫曼樹還是比較容易理解,主要構造利用貪心算法的思想去從下往上構建,哈夫曼編碼相信看了你也有所收獲,有興趣可以自己實現一下哈夫曼編碼的代碼(編碼、解碼)。本人水平有限,如果有錯誤還希望大佬指正!

 

責任編輯:武曉燕 來源: bigsai
相關推薦

2015-03-03 14:10:53

shellcode哈夫曼編碼Huffy

2011-05-20 14:03:31

哈夫曼

2011-04-28 10:07:24

哈弗曼編碼

2021-03-24 10:41:04

Java數據結構算法

2023-06-27 10:41:01

數學論文

2011-12-15 10:38:06

OPEN聯盟以太網

2016-01-08 19:10:00

京東智能

2022-05-09 11:46:49

亞馬遜云科技汽車哈曼

2011-07-13 16:56:10

2025-10-20 09:22:56

2015-10-23 17:12:22

JBL

2015-11-24 15:22:53

HTTP2 WEB 內網穿透

2021-09-23 19:47:17

辦公

2013-04-25 11:01:09

2018-07-12 12:42:14

華為

2015-02-11 10:48:33

谷歌

2011-06-21 10:36:02

投影機評測

2009-06-10 10:10:07

蘋果喬布斯管理團隊

2018-12-25 12:30:03

點贊
收藏

51CTO技術棧公眾號

国产精品论坛| 国产美女www爽爽爽视频| 亚洲瘦老头同性70tv| 日韩人体视频一二区| 亚洲高清精品中出| 亚洲精品国产av| 天堂久久一区二区三区| 久久人体大胆视频| 黄色性生活一级片| 少妇高潮一区二区三区99| 亚洲国产精品一区二区久久恐怖片 | 免费三片在线播放| 亚洲人成精品久久久 | 快射视频在线观看| 92国产精品观看| 国产精品香蕉av| 日本熟妇色xxxxx日本免费看| 精品国产一区二区三区| 精品国产3级a| 国产一伦一伦一伦| 亚洲女色av| 一区二区免费在线| 亚洲看片网站| 欧美色视频免费| 国产91丝袜在线18| 国产深夜精品福利| 蜜臀99久久精品久久久久小说| 欧美日韩国产欧| 一区二区三区 在线观看视| 91福利社在线观看| 国产精品电影一区| 国产香蕉视频在线| 欧美人成在线| 日韩网站免费观看| 中文字幕av久久爽一区| 欧美色资源站| 精品国产露脸精彩对白| 午夜视频在线观| 黄色精品视频| 色激情天天射综合网| 欧美日韩一道本| h片在线观看| 亚洲综合成人在线| 国产盗摄视频在线观看| 日本在线观看视频| 日本一区二区三区久久久久久久久不 | 亚洲欧美日韩一区二区在线 | 国产网站一区二区| 国语精品免费视频| 日本国产在线观看| 波波电影院一区二区三区| 成人免费91在线看| 欧美一级特黄aaaaaa| 成人午夜视频在线| 3d动漫精品啪啪| 色琪琪综合男人的天堂aⅴ视频| 精品一区二区三区四区五区六区| 白嫩白嫩国产精品| 日韩欧美国产不卡| 日韩av无码一区二区三区不卡| 日韩欧美另类中文字幕| 欧美zozozo| 日本一卡二卡在线| 日韩人体视频| 亚洲美女视频网站| 手机看片日韩av| 久久人体视频| 欧美成人h版在线观看| 青娱乐av在线| 亚洲激情综合| 日本不卡免费高清视频| 免费在线观看av的网站| 久草在线在线精品观看| 97久久人人超碰caoprom欧美| 草草视频在线播放| aaa亚洲精品| 日产中文字幕在线精品一区| 亚洲成a人v欧美综合天堂麻豆| 中文字幕在线观看一区| 成人国产在线看| 亚洲做受高潮无遮挡| 亚洲黄色小说网| 国产成人精品网址| 久久成人资源| avtt在线播放| 一区二区不卡在线视频 午夜欧美不卡在| 欧美黄色免费网址| 裤袜国产欧美精品一区| 欧美浪妇xxxx高跟鞋交| 国产污在线观看| 国产欧美一区二区精品久久久| 视频在线观看99| 69精品久久久| 麻豆精品一区二区| 国产精品一区二区免费| www亚洲人| 一区二区三区鲁丝不卡| 国产福利视频在线播放| 国产精品亚洲欧美一级在线 | 漂亮人妻被黑人久久精品| 视频一区在线观看| 久久成人精品视频| 日本黄色一级视频| 国产成a人亚洲| 日本在线观看一区二区三区| 欧美videos另类精品| 在线观看日韩精品| 国产白袜脚足j棉袜在线观看| 欧美日韩水蜜桃| 欧美精品第一页在线播放| 中文字幕 自拍偷拍| 99视频超级精品| 日韩第一页在线观看| 成人国产二区| 精品欧美黑人一区二区三区| 欧美亚洲一级二级| 在线观看免费小视频| 欧美成人中文| 国产精品女主播视频| 少妇精品高潮欲妇又嫩中文字幕| 亚洲国产精品99久久久久久久久| 欧洲精品一区二区三区久久| 国产电影一区二区| 尤物yw午夜国产精品视频| 久久久久久久99| 国产精品18久久久久久久久| 亚洲欧美日本国产有色| 刘亦菲一区二区三区免费看| 日韩美女一区二区三区四区| 女人裸体性做爰全过| 麻豆精品91| 国产综合18久久久久久| 91高清在线观看视频| 欧美老女人在线| www久久久久久久| 免费日韩av片| 精品久久久久久中文字幕动漫| a毛片在线观看| 555夜色666亚洲国产免| 少妇太紧太爽又黄又硬又爽小说| 久久精品一区| 欧美激情www| 亚洲国产福利| 在线亚洲欧美| zzijzzij亚洲日本成熟少妇| 一级黄色av片| 久久婷婷色综合| 99久久久无码国产精品6| 天堂日韩电影| 欧美一区二三区| 日本福利片高清在线观看| 黄色成人av网| 添女人荫蒂视频| 亚洲欧美大片| 女同一区二区| 欧美日韩精品免费观看视欧美高清免费大片| 日韩高清人体午夜| 黄色片视频免费| 国产日韩欧美亚洲| 亚洲美女性囗交| 亚洲欧美在线专区| 成人区精品一区二区| h片在线观看视频免费免费| 日韩成人中文字幕| 懂色av蜜臀av粉嫩av分享吧最新章节| 国产欧美日韩在线看| 国产精品区在线| 亚洲欧美色图| 国内外成人免费视频| 成人免费短视频| 日韩在线免费观看视频| 国产激情久久久久久熟女老人av| 成人免费黄色| 亚洲欧美影音先锋| 一级黄色免费视频| 午夜亚洲一区| 亚洲视频在线二区| 香港久久久电影| 欧美怡春院一区二区三区| 国产对白叫床清晰在线播放| 欧美高清www午色夜在线视频| 青青青在线视频| 久久先锋资源网| 午夜一区二区视频| 亚洲精选在线| 亚洲午夜精品久久久久久浪潮| 久久在线观看| 欧美整片在线观看| 久久综合之合合综合久久| 亚洲国产精品推荐| 中文字幕第一页在线播放| 亚洲黄色尤物视频| 亚洲一级中文字幕| 国产精品一区三区| 男女av免费观看| 亚洲一区二区三区| 久久综合中文色婷婷| www.91精品| 欧美中文字幕在线视频| 成人国产免费电影| 亚洲精品网址在线观看| av中文字幕免费在线观看| 色一情一乱一乱一91av| wwwav国产| 国产欧美日韩另类一区| 国产av一区二区三区传媒| 久久国产剧场电影| 逼特逼视频在线| 国内精品福利| 亚洲在线色站| 伊甸园亚洲一区| 成人看片在线| 国内精品视频| 国产精品观看在线亚洲人成网 | 欧美激情一级精品国产| 91网页在线观看| 精品亚洲一区二区三区在线观看| 国产女人高潮毛片| 欧美午夜电影网| 韩国av中文字幕| 99热精品在线| 欧美日本一道本在线视频| 久久精品亚洲a| 久久久亚洲午夜电影| 中国极品少妇xxxx| 国产一区 二区 三区一级| 69久久久久久| 视频一区二区不卡| 欧美黑人经典片免费观看| 欧美日韩一区自拍| 中文字幕精品在线播放| 91中文字幕精品永久在线| 亚欧精品在线| 精品久久久久久久久久久aⅴ| 欧美韩国日本精品一区二区三区| 嫩草国产精品入口| 国产欧美一区二区三区另类精品| 日韩一区二区三区高清在线观看| 国产热re99久久6国产精品| 欧美天堂视频| 国产国产精品人在线视| 欧美香蕉视频| 国产精品久久国产精品99gif| 久久r热视频| 日本精品视频在线观看| 欧美成人影院| 国产精品久久久久久久av电影| 黑人巨大精品欧美一区二区桃花岛| 国产69精品久久久久9| av电影在线地址| 国内精久久久久久久久久人| xxxx另类黑人| 97在线观看视频国产| 在线中文字幕播放| 日韩免费观看高清| 久久野战av| 91精品国产综合久久男男| 亚洲精品无播放器在线播放| 成人在线国产精品| 欧美日韩中出| 国产精品成人一区二区三区| 欧美男男freegayvideosroom| 久久久久久国产精品免费免费| 日韩精品免费一区二区三区竹菊 | 精品久久久久久电影| av网站中文字幕| 欧洲视频一区二区| 国产精品一二三四五区| 欧美变态tickling挠脚心| 天天插天天干天天操| 亚洲性猛交xxxxwww| 午夜看片在线免费| 欧美高清在线观看| 伊人成综合网站| 国产日韩在线观看av| 日韩高清一区| 久久久久久久久一区| 成人中文视频| 国产1区2区3区中文字幕| 国产日韩欧美三级| 日本中文字幕成人| 少妇久久久久久久| 欧美日韩一二三| www.激情五月| 亚洲免费影视第一页| 美女隐私在线观看| 韩剧1988免费观看全集| 亚洲第一会所| 4444kk亚洲人成电影在线| 天天躁日日躁狠狠躁欧美| 一区二区不卡视频| 在线综合亚洲| 国产精品igao网网址不卡| 91麻豆精品一区二区三区| 韩国一级黄色录像| 精品福利在线看| 国产精品人人妻人人爽| 亚洲女人天堂视频| 日本高清在线观看视频| 国产精品扒开腿做| 9l视频自拍蝌蚪9l视频成人| 日韩一区二区三区资源| 极品av少妇一区二区| 亚欧激情乱码久久久久久久久| 成人免费高清视频| 精品国产精品国产精品| 一本大道久久精品懂色aⅴ| 精品国产黄色片| 亚洲日韩中文字幕| 啦啦啦中文在线观看日本| 国产精品偷伦视频免费观看国产 | 亚洲三级电影| 久久国产精品免费一区| 综合一区av| 一区二区三区 欧美| 91色视频在线| 久久影院一区二区| 欧美一级在线免费| 日本网站在线免费观看视频| 日本精品视频在线| 久久影院资源站| 妞干网视频在线观看| 国产一区二区在线视频| 日本伦理一区二区三区| 91久久人澡人人添人人爽欧美| 天堂av资源在线| 欧美日本亚洲视频| 国产日韩欧美中文在线| 亚洲人成网站在线播放2019| 久久亚洲一区| 最近中文字幕免费| 欧美特黄级在线| 五月天婷婷社区| 91精品国产乱码久久久久久蜜臀 | 久久国产日韩欧美精品| 欧美狂猛xxxxx乱大交3| 精品久久久久久久久久| 蜜臀av午夜精品| 欧美老女人性生活| 日韩精品成人| 在线观看17c| 国产99久久久国产精品潘金网站| 免费高清在线观看电视| 91精品国产免费久久综合| 日韩hmxxxx| 欧美特黄一级大片| 国产第一页视频| 久久精品欧美日韩| 久草热在线观看| 色哟哟入口国产精品| 成人在线高清| 中文字幕一区二区三区乱码| 精品一区二区三区免费播放| 久久精品亚洲a| 欧美v国产在线一区二区三区| 国产高清在线a视频大全 | 日本精品视频在线播放| 神马影视一区二区| 污片在线免费看| 亚洲毛片av在线| 蜜桃av噜噜一区二区三区麻豆| 久久久噜噜噜久久中文字免| 精品素人av| caopor在线视频| 亚洲欧美自拍偷拍| 亚洲av无码一区二区三区dv| 久久久综合免费视频| 亚洲丝袜美腿一区| 国产精品一区二区小说| 亚洲品质自拍视频网站| 乱精品一区字幕二区| 国产97在线播放| 秋霞一区二区三区| 黄色一级视频片| 国产精品国产三级国产aⅴ原创| av在线资源观看| 欧美在线一区二区视频| 久久密一区二区三区| 性高潮免费视频| 欧美性xxxxxx少妇| 日本在线观看高清完整版| 久久综合九色99| 国产一区欧美二区| 波多野结衣国产| yw.139尤物在线精品视频| 精品亚洲自拍| 中文字幕av不卡在线| 亚洲国产综合色| 日本中文字幕电影在线免费观看 | 国产精品一二三视频| 国模吧视频一区| 日韩欧美黄色网址| 精品噜噜噜噜久久久久久久久试看| 国产高清不卡| 日韩视频 中文字幕| 久久久久99精品一区| 午夜精品在线播放| 国产精品福利网站| 亚洲乱亚洲高清| 成年人一级黄色片|