哈弗曼編碼

基本思想

  • 以字符的使用頻率作為權(quán)構(gòu)建一顆哈弗曼樹,然后利用哈弗曼樹對字符進(jìn)行編碼汞扎。
  • 構(gòu)造一顆哈弗曼樹季稳,是將要編碼的字符作為葉子節(jié)點(diǎn),該字符在文件中的使用頻率作為葉子節(jié)點(diǎn)的權(quán)值澈魄,以自底向上的方式景鼠,通過n-1次的‘合并’后構(gòu)造的一棵樹,核心思想是權(quán)值越大的葉子離跟很近痹扇。

貪心策略

  • 每次從樹的集合中取出沒有雙親且權(quán)值最小的兩顆樹作為左右子樹

算法步驟

  1. 確定合適的數(shù)據(jù)結(jié)構(gòu)铛漓。需要考慮情況有:
    • 哈弗曼樹中沒有度為一的節(jié)點(diǎn),則一顆有n個葉子節(jié)點(diǎn)的哈弗曼樹共有2n-1個節(jié)點(diǎn)(n-1次的合并鲫构,每次產(chǎn)生一個新節(jié)點(diǎn))
    • 構(gòu)成哈弗曼樹后浓恶,為求編碼,需從葉子節(jié)點(diǎn)出發(fā)走一條從葉子到根的路徑结笨。
    • 譯碼需要從根出發(fā)走一條從根到葉子的路徑包晰,那么我們需要知道每個節(jié)點(diǎn)頂點(diǎn)權(quán)值、雙親炕吸、左孩子伐憾、右孩子和節(jié)點(diǎn)的信息。
  2. 初始化赫模。構(gòu)造n棵節(jié)點(diǎn)為n個字符的單節(jié)點(diǎn)樹集合T={t1,t2,t3,...,tn}树肃,每棵樹只有一個帶權(quán)的根節(jié)點(diǎn),權(quán)值為該字符的使用頻率瀑罗。
  3. 如果T中只剩下一棵樹扫外,則哈弗曼樹構(gòu)造成功,調(diào)到步驟6廓脆。否則筛谚,從集合T中取出沒有雙親且權(quán)值最小的兩棵樹ti和tj,將他們合并成一顆新樹Zk停忿,新樹的左孩子為ti驾讲,右孩子為tj,Zk的權(quán)值為ti和tj的和。
  4. 從集合T中刪除ti和tj吮铭,加入Zk时迫。
  5. 重復(fù)步驟3-4。
  6. 約定做分支上的編碼為“0”谓晌,右分支上的編碼為“1”掠拳。從葉子節(jié)點(diǎn)到根節(jié)點(diǎn)逆向求處每個字符的哈弗曼編碼,從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑上的字符組成的字符串為該葉子節(jié)點(diǎn)的哈弗曼編碼纸肉。算法結(jié)束
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溺欧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柏肪,更是在濱河造成了極大的恐慌姐刁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烦味,死亡現(xiàn)場離奇詭異聂使,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谬俄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門柏靶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溃论,你說我怎么就攤上這事宿礁。” “怎么了蔬芥?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵梆靖,是天一觀的道長。 經(jīng)常有香客問我笔诵,道長返吻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任乎婿,我火速辦了婚禮测僵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谢翎。我一直安慰自己捍靠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布森逮。 她就那樣靜靜地躺著榨婆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褒侧。 梳的紋絲不亂的頭發(fā)上良风,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天谊迄,我揣著相機(jī)與錄音,去河邊找鬼烟央。 笑死统诺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疑俭。 我是一名探鬼主播粮呢,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钞艇!你這毒婦竟也來了啄寡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤香璃,失蹤者是張志新(化名)和其女友劉穎这难,沒想到半個月后舟误,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葡秒,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年嵌溢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眯牧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赖草,死狀恐怖学少,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秧骑,我是刑警寧澤版确,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站乎折,受9級特大地震影響绒疗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骂澄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一吓蘑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坟冲,春花似錦磨镶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搀擂。三九已至科汗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荣回,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工雹锣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留网沾,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓蕊爵,卻偏偏與公主長得像辉哥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攒射,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 先從文本讀取字符,統(tǒng)計(jì)字符出現(xiàn)的次數(shù)用map保存,然后根據(jù)詞頻計(jì)算每個字符的哈弗曼編碼,哈弗曼樹的建立過程就是每次...
    lxhao閱讀 229評論 0 1
  • 哈夫曼編碼 本人比較懶....關(guān)于哈夫曼樹知識點(diǎn)的介紹就不在博客上說了, 請同學(xué)們自行查閱相關(guān)資料, 直接上代碼,...
    劉翾閱讀 870評論 0 2
  • 代碼: 測試文件: 原始文件醋旦,q1.txt: 根據(jù)q1編碼結(jié)果,寫出對and的編碼会放,q2.txt: 運(yùn)行結(jié)果: 有...
    yigoh閱讀 372評論 1 1
  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu)饲齐,樹與前面介紹的線性表,棧咧最,隊(duì)列等線性結(jié)構(gòu)不同捂人,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,442評論 1 31
  • 簡介 哈夫曼樹是一種帶權(quán)路徑長度最短的二叉樹,也稱為最優(yōu)二叉樹矢沿。 定義:給定 n 個權(quán)值作為 n 個葉子節(jié)點(diǎn)滥搭,構(gòu)造...
    隨時(shí)學(xué)丫閱讀 3,161評論 0 1