一文看懂哈夫曼樹與哈夫曼編碼

轉自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html

在一般的數據結構的書中,樹的那章后面,著者一般都會介紹一下哈夫曼(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個權值{W1,W2,W3,…,Wi,…,Wn}構成n棵二叉樹的初始集合F= {T1,T2,T3,…,Ti,…,Tn},其中每棵二叉樹Ti中只有一個權值為Wi的根結點,它的左右子樹均為空。(為方便在計算機上實現算 法,一般還要求以Ti的權值Wi的升序排列。)
二、在F中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。
三、從F中刪除這兩棵樹,并把這棵新的二叉樹同樣以升序排列加入到集合F中。
四、重復二和三兩步,直到集合F中只有一棵二叉樹為止。

簡易的理解就是,假如我有A,B,C,D,E五個字符,出現的頻率(即權值)分別為5,4,3,2,1,那么我們第一步先取兩個最小權值作為左右子樹構造一個新樹,即取1,2構成新樹,其結點為1+2=3,如圖:
這里寫圖片描述
虛線為新生成的結點,第二步再把新生成的權值為3的結點放到剩下的集合中,所以集合變成{5,4,3,3},再根據第二步,取最小的兩個權值構成新樹,如圖:
這里寫圖片描述
再依次建立哈夫曼樹,如下圖:
這里寫圖片描述
其中各個權值替換對應的字符即為下圖:
這里寫圖片描述
所以各字符對應的編碼為:A->11,B->10,C->00,D->011,E->010

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456552.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決:未能將管道連接到虛擬機: 所有的管道范例都在使用中。

虛擬機無端出現: VMware Workstation 無法連接到虛擬機。請確保您有權限運行該程序、訪問改程序使用的所有目錄以及訪問所有臨時文件目錄。未能將管道連接到虛擬機: 所有的管道范例都在使用中。 原因:Ubuntu開機慢到開不開,我就在任務管理器強制結束了…

tcpdf開發文檔(中文翻譯版)

2017年5月3日15:06:15 這個是英文翻譯版,我看過作者的文檔其實不太友善或者不方便閱讀,不如wiki方便 后面補充一些,結構性文檔翻譯 這是一部官方網站文檔,剩余大部分都是開發的時候和網絡總結來的 項目官網:https://t…

CCF推薦各種國際學術會議和期刊目錄

這是中國計算機學會推薦國際學術會議和期刊目錄2015年版本的內容, 主要羅列了國際上計算機相關的各個方向的頂級學術會議和期刊目錄(包含A、B、C三個等級)。 包含的方向有: 計算機體系結構/并行與分布計算/存儲系統計算機網絡網絡…

Linux基本操作【作業】

1.如何使用命令立即重啟linux操作系統? sudo reboot 2.如何查看/etc下的所有文件,并以列表格式顯示,并且顯示隱藏文件 cd /etc | ls -la 3.一次性創建 text/1/2/3/4 cd tmp mkdir -p text/1/2/3/4 (1&#xff…

開發日志_Jan.8.2017

這兩天繼續著手開發碰撞部分。 主要工作是寫碰撞類和運動線程類。碰撞主要在于算法,運動線程只要管理好就行了。 之前碰撞測試中(即還未添加完整碰撞算法時)遇到各種bug,疑似機器人和小球的定位點不明所造成的。昨天研究了下QT下的…

Nginx【學習筆記】

Nginx 1. nginx可以做什么? 可針對靜態資源高速高并發訪問及緩存。 可使用反向代理加速,并且可進行數據緩存。 具有簡單負載均衡、節點健康檢查和容錯功能。 支持遠程FastCGI服務的緩存加速。 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和…

第四次作業類測試代碼+036+吳心怡

一、類圖 二、代碼 package application; public class Commission { /* * hp:耳機 80元 mpc:手機殼 10元 cpsp:手機貼膜 8元 */ public float calculate(String line) { int hp 0, mpc 0, cpsp 0; String[] input null; float money 0;…

LSI/LSA算法原理與實踐Demo

目錄:1、使用場景2、優缺點3、算法原理3.1、傳統向量空間模型的缺陷3.2、Latent Semantic Analysis (Latent Semantic Indexing)3.3、算法實例 4、文檔相似度的計算5、對應的實踐Demo 目錄: 1、使用場景 文本挖掘中,主題模型。聚類算法關注…

解決: ubuntu18.04沒有網絡直連

初次安裝ubuntu 18.04, 發現沒有網絡. 直接上我遇到的這個問題的解決方法 sudo service NetworkManager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service NetworkManager start 未能解決問題的方法有 修改/etc/netplan/*.yaml 修改/etc/NetworkMana…

Linux學習134 Unit 8

Unit8 ldap網絡帳號1.ldap是什么ldap目錄服務認證,和windows活動目錄類似,就是記錄數據的一種方式2.ldap客戶端所須軟件yum sssd krb5-workstation -y3.如何開啟ldap用戶認證authconfig-tui┌────────────────┤ Authentication Configu…

FastText原理總結

目錄:1、應用場景2、優缺點3、FastText的原理4、FastText詞向量與word2vec對比 目錄: 1、應用場景 fastText是一種Facebook AI Research在16年開源的一個文本分類器。 其特點就是fast。相對于其它文本分類模型,如SVM,Logistic …

解決 :sudo:/etc/sudoers 可被任何人寫

問題: sudo:sudo /etc/sudoers is world writable sudo:no valid sudoers sources found ,quitting sudo:unable to initialize policy plugin 解決方案: 方法一: 1.開機按shift或esc進入ubantu高級模式 再進行recovery模式 2.選擇root命令行模式 3.…

sqlserver數據庫類型對應Java中的數據類型

SQL Server 類型JDBC 類型 (java.sql.Types)Java 語言類型 bigint BIGINT long timestamp binary BINARY byte[] bit BIT boolean char CHAR String decimal money smallmoney DECIMAL java.math.BigDecimal float DOUBLE double int INTEGER int image v…

Doc2Bow簡介與實踐Demo

Doc2Bow是Gensim中封裝的一個方法,主要用于實現Bow模型,下面主要介紹下Bow模型。 1、BoW模型原理 Bag-of-words model (BoW model) 最早出現在自然語言處理(Natural Language Processing)和信息檢索(Information Ret…

linux nginx完全卸載

比較靠譜的解決辦法是: root權限下載命令行敲入如下命令: sudo rm -rf /etc/nginx/ sudo rm -rf /usr/sbin/nginx sudo rm /usr/share/man/man1/nginx.1.gz sudo apt-get remove nginx* 原理就是刪除關聯文件以及文件夾。

[LeetCode]Basic Calculator

題目:Basic Calculator 給定一個合法的運算表達式,該表達式中只包含數字、、-、 、(、)。 思路: 簡單思考不用看成加減兩種運算,直接看成加法,只不過由正負; 如何處理括號呢?因為只看成加法&…

SPOJ 694/705 后綴數組

思路&#xff1a; 論文題*n Σn-i-ht[i]1 就是結果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 55555 int cases,n,cntA[N],cntB[N],A[N],B[N],rk[N],sa[N],tsa[N],ht[N]; char…

如何用余弦定理來進行文本相似度的度量

在做文本分析的時候&#xff0c;經常會到說將文本轉化為對應的向量&#xff0c;之后利用余弦定理來計算文本之間的相似度。但是最近在面試時&#xff0c;重復上面這句話&#xff0c;卻被面試官問到&#xff1a;“什么是余弦定理&#xff1f;”當時就比較懵逼&#xff0c;于是把…

Mongodb 備份和恢復

為什么80%的碼農都做不了架構師&#xff1f;>>> Mongodb 備份和恢復 mongodump -h host -u "username" -p "userpass" -d dbname -o backfilename tar -cvzf backfilename.tar backfilename tar -xvzf backfilename.tar mongorestore -h…

【linux】Ubuntu 18.04 設置桌面快捷啟動方式

使用Ubuntu終端進行打開&#xff1a; 方法一&#xff08;使用vim&#xff09;&#xff1a; sudo vi /usr/share/applications/pycharm.desktop 方法二&#xff08;使用gedit&#xff09;&#xff1a; sudo gedit /usr/share/applications/pycharm.desktop 然后就會彈出一個…