一讯泣、阮一峰 熵:宇宙的終極規(guī)則
為了理解熵,必須講一點物理學阅悍。
19世紀好渠,物理學家開始認識到,世界的動力是能量节视,并且提出"能量守恒定律"拳锚,即能量的總和是不變的。但是寻行,有一個現(xiàn)象讓他們很困惑霍掺。物理學家發(fā)現(xiàn),能量無法百分百地轉(zhuǎn)換拌蜘。比如杆烁,蒸汽機使用的是熱能,將其轉(zhuǎn)換為推動機器的機械能简卧。這個過程中兔魂,總是有一些熱能損耗掉,無法完全轉(zhuǎn)變?yōu)闄C械能举娩。一開始析校,物理學家以為是技術(shù)水平不高導致的构罗,但后來發(fā)現(xiàn),技術(shù)再進步智玻,也無法將能量損耗降到零遂唧。他們就將那些在能量轉(zhuǎn)換過程中浪費掉的、無法再利用的能量稱為熵尚困。后來蠢箩,這個概念被總結(jié)成了"熱力學第二定律":能量轉(zhuǎn)換總是會產(chǎn)生熵,如果是封閉系統(tǒng)事甜,所有能量最終都會變成熵。
熵既然是能量滔韵,為什么無法利用逻谦?它又是怎么產(chǎn)生的?為什么所有能量最后都會變成熵陪蜻?這些問題我想了很久邦马。物理學家有很多種解釋,有一種我覺得最容易懂:能量轉(zhuǎn)換的時候宴卖,大部分能量會轉(zhuǎn)換成預先設(shè)定的狀態(tài)滋将,比如熱能變成機械能、電能變成光能症昏。但是随闽,就像細胞突變那樣,還有一部分能量會生成新的狀態(tài)肝谭。這部分能量就是熵掘宪,由于狀態(tài)不同,所以很難利用攘烛,除非外部注入新的能量魏滚,專門處理熵》厥總之鼠次,能量轉(zhuǎn)換會創(chuàng)造出新的狀態(tài),熵就是進入這些狀態(tài)的能量芋齿。
現(xiàn)在請大家思考:狀態(tài)多意味著什么腥寇?狀態(tài)多,就是可能性多沟突,表示比較混亂花颗;狀態(tài)少,就是可能性少惠拭,相對來說就比較有秩序扩劝。因此庸论,上面結(jié)論的另一種表達是:能量轉(zhuǎn)換會讓系統(tǒng)的混亂度增加,熵就是系統(tǒng)的混亂度棒呛。轉(zhuǎn)換的能量越大聂示,創(chuàng)造出來的新狀態(tài)就會越多,因此高能量系統(tǒng)不如低能量系統(tǒng)穩(wěn)定簇秒,因為前者的熵較大鱼喉。而且嗦嗡,凡是運動的系統(tǒng)都會有能量轉(zhuǎn)換左医,熱力學第二定律就是在說,所有封閉系統(tǒng)最終都會趨向混亂度最大的狀態(tài)侈净,除非外部注入能量皱坛。
熵讓我理解了一件事编曼,如果不施加外力影響,事物永遠向著更混亂的狀態(tài)發(fā)展剩辟。比如掐场,房間如果沒人打掃,只會越來越亂贩猎,不可能越來越干凈熊户。
二、知乎大黑旗回答 信息熵與熱力學統(tǒng)計物理中的熵有什么區(qū)別和聯(lián)系吭服?
不清楚題主的學科背景嚷堡,以下回答面向從未系統(tǒng)學習熱力學和信息論的朋友,從三個層次討論“熵”的意義——這其實也是這個概念本身發(fā)展的歷程噪馏。文字有些長麦到,性急的同學可以直接看最后的總結(jié)。
一. 熵和永動機——熱力學熵的宏觀形式
“熵”是一個十分古老的概念欠肾,可以上溯至蒸汽時代人們對熱機的研究瓶颠。和熱量、溫度等其他熱力學概念相比刺桃,它的確因抽象而難以理解粹淋。為避免讀者被公式和其它概念嚇到,我們從大家喜聞樂見的“永動機”的故事開始瑟慈。
我們都知道桃移,第一類永動機(即不消耗能源卻可以不斷對外做功的機器)因為違反能量守恒定律所以是不存在的。但不甘心的工程師們很快又設(shè)想出了另一種神奇的機械葛碧,被稱為第二類永動機借杰。由于它過于神奇,為了理解它进泼,我們必需先研究一艘正常的船蔗衡。
假設(shè)這艘船的動力系統(tǒng)是一座蒸汽機纤虽,當它工作的時候,煤在鍋爐里燃燒绞惦,釋放它的化學能變?yōu)闊崮鼙浦剑缓笤俳?jīng)卡諾循環(huán)轉(zhuǎn)化為船的機械能。而船在航行的時候济蝉,又要不斷克服水的阻力做功杰刽,機械能轉(zhuǎn)化為水的內(nèi)能。所以在船勻速航行的情況下王滤,煤燃燒釋放的能量最終轉(zhuǎn)化為了水的內(nèi)能(也許表現(xiàn)為使海水的溫度上升了一億億分之一攝氏度)贺嫂。而我們?yōu)榱吮3执暮叫校荒懿粩嗟責骸?/p>
而如果我有一艘新船雁乡,它有一個棒棒的動力系統(tǒng)涝婉,能直接從海水里吸收能量,并完全轉(zhuǎn)化為船的機械能蔗怠。這樣一來,我們就能見證一個奇跡:船從海水里獲得能量吩跋,航行時克服水的阻力做功寞射,又把能量還給海——在這個過程中船和海的總能量沒有變多也沒有變少锌钮,因此絲毫不違反能量守恒定律——然而它不需要燒一粒煤就能環(huán)游世界桥温。
這當然是不可能的。但是為了證明這個“不可能”梁丘,當時的科學家付出了很多的努力侵浸。最終,魯?shù)婪颉た藙谛匏拱l(fā)現(xiàn)氛谜,任何可以自發(fā)進行的過程中掏觉,恒溫熱Q和溫度T的比值永遠是一個正值。
克勞修斯是德國人值漫,便用德語Entropie命名這個比值澳腹,直到幾十年后南京大學的胡剛復教授才將這個概念引入國內(nèi),并命名為“熵”(意指Q和T的商數(shù))杨何。由定義式我們不難知道酱塔,它的量綱是J/K。
熵就像一個固執(zhí)的沙漏危虱,能量每進行一次轉(zhuǎn)化羊娃,它就向前走一點,而它每向前走一點埃跷,能量被利用的能力就減少一點蕊玷。這個過程猶如時間流逝邮利、人的衰老一樣不能逆轉(zhuǎn)。這也就是著名的熵增原理:任何孤立系統(tǒng)的總熵不會減少集畅。如果說能量守恒定律限定了能量的數(shù)量近弟,那么熵增原理就限定了能量的質(zhì)量:較優(yōu)質(zhì)的能量可以完全轉(zhuǎn)化為較劣質(zhì)的能量,但較劣質(zhì)的能量卻不可能完全轉(zhuǎn)化為較優(yōu)質(zhì)的能量挺智。比如一根簡單的電阻絲就能把電能完全轉(zhuǎn)化為熱能祷愉,但最先進的發(fā)電機也不可能把這些熱能重新轉(zhuǎn)變?yōu)榈攘康碾娔堋_@就是第二類永動機不能實現(xiàn)的原因——機械能是比內(nèi)能優(yōu)質(zhì)的能量赦颇,所以直接從海水里吸收熱量二鳄,并完全轉(zhuǎn)化為船的機械能的裝置壓根就不存在。
二.熵和有序性——熱力學熵的微觀形式
1877年媒怯,玻爾茲曼提出了著名的玻爾茲曼原理:S=klnΩ订讼。也就是熵的微觀形式,其中的k是玻爾茲曼常數(shù)扇苞,量綱為J/K欺殿,由于后面對數(shù)項不具量綱,所以玻爾茲曼熵的量綱也是J/K鳖敷,這是證明它和宏觀形式等價的前提脖苏。
公式中的Ω是微觀狀態(tài)數(shù),即微觀上構(gòu)型的所有可能的排列數(shù)定踱。Ω有時也被理解成“混亂度”棍潘,這是合理的。因為作為越有規(guī)律的系統(tǒng)崖媚,構(gòu)型就越少亦歉,而混亂的系統(tǒng)可以有較多個構(gòu)型。例如畅哑,設(shè)想有一組10個硬幣肴楷,每一個硬幣有兩面,擲硬幣時得到最有規(guī)律的狀態(tài)是10個都是正面或10個都是反面敢课,這兩種狀態(tài)都只有一種構(gòu)型(排列)阶祭。反之,如果是最混亂的情況直秆,有5個正面5個反面濒募,排列構(gòu)型可以有=252種。(這個例子摘自維基百科)
這也形成了熵最廣為人知的理解:熵是系統(tǒng)混亂度(無序程度)的量度圾结。其實瑰剃,由于宏觀系統(tǒng)的Ω是一個天文數(shù)字,以至于我們往往無法計算筝野,所以實際應(yīng)用中熵的微觀描述遠不如宏觀描述常見晌姚。但由于我們處在一個看臉的世界粤剧,連物理定律也不能例外,這種金光閃閃的表達式和解釋比土里土氣的宏觀描述容易流傳太多了(同樣可以解釋為什么這種東西連幼兒園小朋友都知道)挥唠。
其實我覺得玻爾茲曼原理反過來想更令人震撼——對于一個系統(tǒng)抵恋,如果某一時刻它的熵確定,那么它可能的微觀狀態(tài)數(shù)也是一定的宝磨。如果這個系統(tǒng)是整個宇宙的話弧关,這就意味著我們這個世界的可能性也是有限的(盡管非常非常多)……OMG!我要去看女神自拍壓壓驚了唤锉。另外需要注意的是世囊,熵的微觀形式是直接和狀態(tài)數(shù)Ω對應(yīng)的,因此是一個絕對值而非相對值窿祥。而由于Ω是自然數(shù)株憾,所以熵一定非負;特別的晒衩,絕對零度下的晶態(tài)物質(zhì)Ω為1嗤瞎,所以S=kln1=0,這也就是熱力學第三定律听系。
以上兩種熵都叫做“熱力學熵”猫胁,因為它們的等價性已經(jīng)被證明。
三.熵和信息量——信息熵的意義
信息熵的來歷和熱力學熵完全不同跛锌。把它也叫做“熵”完全是因為香農(nóng)老爺子當年提出這個概念時參考了熱力學熵,并且它的表達式和熱力學熵的微觀形式非常相似(但和宏觀描述看不出任何相似性)的緣故届惋。后來也有人提出了信息熵的其他表述形式髓帽,為了方便,下文以最早也最重要的香農(nóng)熵為準脑豹。信息熵的表達式:H=-ElnP(x) 其中E是期望郑藏,P(x)是出現(xiàn)的概率(含義下面會提到)。大家發(fā)現(xiàn)了吧瘩欺,它和玻爾茲曼熵表達式S=klnΩ形式完全一樣必盖,只有常數(shù)上的差別。實際應(yīng)用中俱饿,為了對應(yīng)二進制數(shù)歌粥,更常見的是以2為底的形式:,此時結(jié)果的量綱為比特拍埠。
它的意義非常明確失驶,指觀察者對某一事件(結(jié)果)的未知程度。舉個例子:我要拋一次骰子枣购,在觀測到結(jié)果之前嬉探,骰子六個面向上都有可能擦耀,而且概率完全一樣(都是1/6).這時,這一事件的信息熵為∩蹋現(xiàn)在萬能的女神給了我一個提示眷蜓,這次骰子的結(jié)果一定是偶數(shù),于是可能的結(jié)果由6種降低為3種胎围,事件的熵也就變成了
吁系。也就是說,當我得到提示后痊远,對于事件結(jié)果的不確定性降低了垮抗。我們把信息熵降低的量規(guī)定為信息量I。上面那條提示對我的信息量是
碧聪,正好是1比特冒版,相當于對一個完全未知的命題做一次是非判斷需要的信息量。而如果我要得到唯一確定的結(jié)果逞姿,P(x)就必須等于1辞嗡,此時的信息熵為零。我們需要得到的信息量就是原本的熵
滞造。
看到這里续室,聰明的你一定已經(jīng)可以自己總結(jié)出另一個金光閃閃的結(jié)論:信息就是負熵。需要特別注意的是谒养,這句話里的“熵”指而且僅指信息熵挺狰,試圖將這個結(jié)論擴大到熱力學熵的解釋往往都缺乏足夠的事實基礎(chǔ),并且含義也經(jīng)常是含混的买窟。
我們再來看另一個例子:甲乙丙三個實力相當?shù)倪\動員要進行一次比賽丰泊,老王是比賽的裁判和記分員,他必須觀察并如實記錄三位選手的名次始绍。所以對于他來說瞳购,比賽結(jié)果有=6種。由于運動員實力相當亏推,每種結(jié)果出現(xiàn)的可能性一樣学赛,所以結(jié)果的熵是
小花是運動員甲的女朋友,她如此愛自己的男友以至于只關(guān)心他有沒有取得冠軍而完全不在意其它選手的成績吞杭。對于小花來講盏浇,比賽的結(jié)果只有兩種,它的熵大約是0.92(計算略去芽狗,大家應(yīng)該不會對數(shù)學計算感興趣吧)缠捌。有的同學會奇怪,這里的熵為什么不是1?原因是由于甲乙丙三個運動員實力相當曼月,所以甲獲得冠軍的幾率只有1/3谊却。也就是說如果小花足夠聰明的話,在比賽前就可以知道甲獲得冠軍的可能比不獲得冠軍的可能小哑芹。這種預期降低了事件的未知程度(熵)炎辨,也降低了結(jié)果對小花的信息量。
老李是比賽場地的管理員聪姿,他完全不關(guān)心誰勝誰負碴萧,而只想等到比賽結(jié)束下班回家,那么比賽對他的熵是多少呢末购?答案是零破喻,因為他只關(guān)心比賽有沒有結(jié)束,而比賽只要一開始就注定會結(jié)束盟榴,這個結(jié)果是唯一確定的曹质。所以老李根本不用觀察比賽,只要坐著等就可以了擎场。
這個例子說明對于不同的觀察者羽德,由于目的和觀測能力的差異,同一個事件的熵也可能是不同的迅办。
我們再回頭看老王的記分板宅静,他用三組二進制數(shù)記錄比賽結(jié)果。第一組記錄甲的名次站欺,第二組記錄乙的名次姨夹,第三組記錄丙的名次,由于名次有三個可能的值(第1第2第3)矾策,每組二進制數(shù)都必需是兩位的匀伏,所以老王對比賽結(jié)果的記錄由六位二進制數(shù)構(gòu)成。
老王的兒子小王是一個多才多藝的程序員蝴韭,他看到了老王的記分板開始了吐槽:由于比賽只有三位選手,只要其中兩位選手的名次確定第三位選手的名次也就確定了熙侍。因此第三組二進制數(shù)完全是沒有必要的(我們也稱它為冗余)榄鉴,老王只需要四位二進制數(shù)就能表示全部的信息。
老王十分羞愧蛉抓,忙請教小王能否更加簡潔庆尘。小王想了想,把所有六種可能的結(jié)果羅列了出來巷送,并給每種情況賦予了一個代號驶忌,比如001表示甲乙丙的結(jié)果,010表示甲丙乙的結(jié)果……這樣老王每次就只需要三位二進制數(shù)(3比特)就可以記錄原本要6比特才能表示的信息了。這個故事告訴我們付魔,同樣的信息用不同形式描述聊品,會產(chǎn)生長度不同的記錄(我們稱之為消息),因此無損壓縮是可能的几苍。這也是清晰度差不多的視頻文件有的格式卡成狗有的格式卻十分流暢的原因翻屈。
故事的最后,老王貪心不足妻坝,希望用更短的消息來記錄比賽結(jié)果伸眶,然而多次嘗試之后可恥的失敗了。這是因為比賽結(jié)果的熵是log2(6)刽宪,大約是2.58厘贼,因此至少需要3位二進制數(shù)(3比特)才能描述,即消息不可能比它所包含的信息更短圣拄。也就是說無損壓縮有其極限嘴秸,判斷這個極限是信息熵的另一個應(yīng)用。
四售担、總結(jié)
好了赁遗,我們現(xiàn)在總結(jié)一下,并試著回答題主的問題族铆。
- 1.熱力學熵有兩個表述岩四,即宏觀形式和微觀形式,它們的意義和表達式都不同哥攘,然而卻被證明是等價的剖煌。
- 2.熱力學熵的宏觀描述的直接意義是能量中不能用來做功的那一部分,可以用來描述能量的優(yōu)劣逝淹。
- 3.熱力學熵的微觀描述直接反映了體系的混亂(無序)程度耕姊。
- 4.信息熵(香農(nóng)熵)描述觀測者對未知事件的不確定性,也表示未知事件可能含有的信息量栅葡。
那么信息熵和熱力學熵有什么區(qū)別和聯(lián)系呢茉兰?
首先要說的是,信息熵和熱力學熵是完全不同的兩個概念欣簇。它們形成于不同的理論體系中规脸,無論含義、量綱熊咽、研究對象莫鸭、作用都不相同。據(jù)我所知横殴,目前也沒有成熟的理論揭示二者有實質(zhì)上的聯(lián)系被因。
那么為什么許多人把這兩者聯(lián)系在一起呢?我想最重要的原因就是二者的數(shù)學表達式實在太像了,以至于它們在數(shù)學上的性質(zhì)也很類似梨与,甚至可以把統(tǒng)計力學中研究熱力學熵的方法直接移植到信息論中研究信息熵堕花,這導致了“信息熱力學”的建立。
其實除了信息熵之外蛋欣,生態(tài)學家和社會學家也借鑒熱力學熵航徙,在各自領(lǐng)域中提出了類似概念。
看到有同學在追問陷虎,補充幾點:
1.我們理解一個概念時不應(yīng)脫離產(chǎn)生這個概念的并使之發(fā)揮作用的理論體系到踏。比如脫離熱力學的框架談熱力學熵,或者脫離信息論的框架談?wù)撔畔㈧卦谶壿嬌隙际谴嗳醯摹?/p>
2.如果要證明二者是一回事尚猿,不能只看形式是否相似窝稿,而是要通過嚴格的理論證明。而做到這一點的前提是必須有一套理論體系能夠把二者都包括進去凿掂。比如熱力學熵的兩種形式等價是嚴格的理論計算證明了的伴榔,于是熱力學和統(tǒng)計力學也就變成了一門統(tǒng)一的學科。而目前信息論和熱力學并沒有統(tǒng)一的跡象庄萎。
3.前排回答中的某些計算踪少,在我看來很明顯是錯誤的。比如拋硬幣的那個例子:原答主計算“拋硬幣”系統(tǒng)的玻爾茲曼熵和香農(nóng)熵糠涛,并認為二者是相等的援奢。然而玻爾茲曼公式中的Ω意義很明確,就是微觀狀態(tài)數(shù)忍捡。它由系統(tǒng)的結(jié)構(gòu)集漾、溫度、體積砸脊、質(zhì)量等因素決定具篇,是一個客觀的物理量(它的取值不依賴于觀測者)。而“拋硬幣”是一個抽象的邏輯模型凌埂,顯然不具有這些性質(zhì)驱显,因此根本無法計算它的熱力學熵。說得更普遍些:你無法計算一個邏輯模型的熱力學熵瞳抓,同樣也無法計算熱力學系統(tǒng)的信息熵(因為缺乏明確的觀測者和觀測標準)埃疫。這也是為什么說上面第一點很重要的原因。其次挨下,這個計算中該答主將玻爾茲曼常數(shù)遺漏了,以至于竟得出了以比特為量綱的“熱力學熵”脐湾。
4.有人說玻爾茲曼熵是信息熵的上限臭笆。這個說法在哲學上也許是正確的,但它目前似乎也只有哲學上的意義。
三愁铺、【H.264/AVC視頻編解碼技術(shù)詳解】七鹰霍、 熵編碼算法(1):基礎(chǔ)知識
- 熵編碼概念
“熵”這一概念原本來自于化學和熱力學,用于度量能量退化的指標茵乱,即熵越高茂洒,物體或系統(tǒng)的做功能力越低。后來香農(nóng)將這一概念引入到信息論中瓶竭,用于表示消息的平均信息量督勺。信源的熵通常可以表示信源所發(fā)出信息的不確定性斤贰,即越是隨機的智哀、前后不相關(guān)的信息,其熵越高荧恍。
在信息論中瓷叫,香農(nóng)提出了信源編碼定理。該定理說明了香農(nóng)熵與信源符號概率之間的關(guān)系送巡,說明信息的熵為信源無損編碼后的平均碼字長度的下限摹菠。任何的無損編碼方法都不可能使編碼后的平均碼長小于香農(nóng)熵,只能使其盡量接近骗爆。
基于此次氨,對信源進行熵編碼的基本思想,是使其前后的碼字之間盡量更加隨機淮腾,盡量減小前后的相關(guān)性糟需,更加接近其信源的香農(nóng)熵。這樣在表示同樣的信息量時所用的數(shù)據(jù)長度更短谷朝。
(插入?yún)⒖?a target="_blank" rel="nofollow">三分鐘學習 | 熵編碼)
那什么是熵編碼洲押?在信息熵的極限范圍內(nèi)進行編碼就是熵編碼。例如信息熵算出來是3bit/字符圆凰,你用4bit/字符來編碼杈帐,就是熵編碼,你用2bit/字符來編碼专钉,就不叫熵編碼挑童,因為這種情況下,就失真了嘛跃须。從這里也看以看出站叼,信源熵是編碼這個信源平均所需要的最小位數(shù)。所以菇民,熵編碼是無損壓縮尽楔。
熵編碼有很多種:
- 霍夫曼編碼 (Huffman)
- 算術(shù)編碼
- 行程編碼 (RLE)
- 基于上下文的自適應(yīng)變長編碼(CAVLC)
- 基于上下文的自適應(yīng)二進制算術(shù)編碼(CABAC)
在實際使用中投储,常用的熵編碼主要有變長編碼和算術(shù)編碼等方法。其中變長編碼相對于算術(shù)編碼較為簡單阔馋,但平均壓縮比可能略低玛荞。常見的變長編碼方法有哈夫曼編碼和香農(nóng)-費諾編碼等。例如JPEG用的是Huffman編碼和算術(shù)編碼呕寝,H264用的是CAVLC和CABAC勋眯。
- 熵編碼的簡單實現(xiàn)——哈夫曼編碼
戴維·哈夫曼(David·A·Huffman)于1952年在麻省理工學院的羅伯特·費諾的指導下攻讀博士學位時,發(fā)明了一種基于有序頻率二叉樹的編碼方法下梢,該方法的編碼效率超過了他的導師和信息論之父香農(nóng)的研究成果(香農(nóng)-費諾編碼)客蹋,因此又稱作“最優(yōu)編碼方法”。
哈夫曼編碼時變長編碼方法的一種怔球,該方法完全依賴于碼字出現(xiàn)的概率來構(gòu)造整體平均長度最短的編碼方法嚼酝。進行哈夫曼編碼的關(guān)鍵步驟是建立符合哈夫曼編碼規(guī)則的二叉樹,該樹又稱作哈夫曼樹竟坛。
哈夫曼樹是一種特殊的二叉樹闽巩,其終端節(jié)點的個數(shù)與待編碼的碼元的個數(shù)等同,而且每個終端節(jié)點上都帶有各自的權(quán)值担汤。每個終端節(jié)點的路徑長度乘以該節(jié)點的權(quán)值的總和稱為整個二叉樹的加權(quán)路徑長度涎跨。在滿足條件的各種二叉樹中,該路徑長度最短的二叉樹即為哈夫曼樹崭歧。
在使用哈夫曼編碼執(zhí)行對碼元的實際編碼過程時隅很,碼元的權(quán)值可設(shè)置為其概率值,那么可以根據(jù)其權(quán)值來構(gòu)建哈夫曼樹率碾。我們假設(shè)使用哈夫曼編碼對以下概率的碼字進行編碼:
碼字 | 概率 |
---|---|
A | 0.1 |
B | 0.1 |
C | 0.15 |
D | 0.2 |
E | 0.2 |
F | 0.25 |
根據(jù)概率表構(gòu)建哈夫曼樹的過程如下圖所示:
最終我們可以得到如下圖所示的哈夫曼樹:
在哈夫曼樹構(gòu)建完成后叔营,便可以得到每一個碼元的哈夫曼編碼的碼字。具體方法是:從哈夫曼樹的根節(jié)點開始遍歷所宰,直至每一個終端節(jié)點绒尊,當訪問某個節(jié)點的左子樹時賦予碼字0,訪問右子樹時賦予一個碼字1(反之亦可)仔粥,直到遍歷到終端節(jié)點時這一路徑所代表的0和1的串便是該碼元的哈夫曼編碼碼字婴谱。
例如上圖的哈夫曼樹,根節(jié)點訪問左子樹ABCF躯泰,賦予碼字0谭羔;然后再訪問左子樹ABC,賦予碼字0麦向,此時整個碼字為00瘟裸,然后訪問右子樹得到終端節(jié)點C,賦予碼字1诵竭,此時便可以得到C的哈夫曼編碼碼字001话告。以此規(guī)律十办,整個六個元素的碼元集合的編碼碼表為:
碼字 | 編碼 |
---|---|
A | 0000 |
B | 0001 |
C | 001 |
D | 10 |
E | 11 |
F | 01 |
從這個碼表中還可以看出另外一個規(guī)律:哈夫曼編碼的任意一個碼字,都不可能是其他碼字的前綴超棺。因此通過哈夫曼編碼的信息可以緊密排列連續(xù)傳輸,而不用擔心解碼時的歧義性呵燕。
缺點:
- 數(shù)據(jù)的概率變化難于實時統(tǒng)計
- Huffman樹需要編碼傳輸給解碼器(對信源進行哈夫曼編碼后棠绘,形成一個哈夫曼編碼表,解碼時再扭,必須參照這一哈夫曼編碼表才能正確解碼)
- 只有在
時是最優(yōu)編碼(由于哈夫曼編碼的依據(jù)是信源符號的概率分布氧苍,故其編碼效率取決于信源的統(tǒng)計特性。當信源符號的概率相等時泛范,其編碼效率最低让虐;只有在概率分布很不均勻時,哈夫曼編碼才會收到顯著效果罢荡;當符號出現(xiàn)概率分布為
型時赡突,哈夫曼編碼能使平均碼長降奧信源熵值H(x),編碼效率為100%)
- 最小碼字長度為1比特/符號
四区赵、【H.264/AVC視頻編解碼技術(shù)詳解】八惭缰、 熵編碼算法(2):H.264中的熵編碼基本方法、指數(shù)哥倫布編碼
指數(shù)哥倫布編碼同哈夫曼編碼最顯著的一點不同在于笼才,哈弗曼編碼構(gòu)建完成后必須在傳遞的信息中加入碼字和碼元值的對應(yīng)關(guān)系漱受,也就是編碼的碼表,而指數(shù)哥倫布編碼則不需要骡送。
1.先看例子昂羡,再說概念:
使用指數(shù)哥倫布編碼來表示數(shù)值codeNum = 10,那么其前綴0的長度為prefixLen = floor[log2(codeNum+1)] = 3摔踱,因此指數(shù)哥倫布碼的前綴為 0 0 0虐先。其后綴部分的二進制表示為codeNum+1-2^prefixLen = 11-8 = 3 = b(0 1 1),因此10的指數(shù)哥倫布編碼碼字為0 0 0 1 0 1 1昌渤。
也就是說赴穗,哥倫布編碼以中間的1為對稱軸,前綴全寫0膀息,需要先算出一共要寫幾個0般眉。然后再算后綴的信息位,上面使用的公式暫時先不解釋潜支。
看一下怎么還原:當讀取到指數(shù)哥倫布編碼碼字為0 0 0 1 0 1 1時甸赃,先計算前綴個數(shù)是3,然后越過中間的1冗酿,得到后綴信息位是二進制的011埠对,也就是十進制的3络断。那么解碼值就是2^3-1+3=10
使用以上技巧再看下20的編碼:
codeNum = 20
prefixLen = floor[log2(codeNum+1)] = floor[log2(21)]=4
surfix = codeNum+1-2^prefixLen=20+1-2^4=5=二進制的101
編碼值=0000,1项玛,0101(為方便觀看貌笨,以逗號分隔了)
看一下解碼:
前綴4個0,后綴信息位0101襟沮,也就是5锥惋。所以2^4-1+5=20
2.概念
在H.264的標準協(xié)議中,不同的語法元素指定了不同的熵編碼方法开伏。在協(xié)議文檔中共指定了10種語法元素的描述符膀跌,這些描述符表達了碼流解析為語法元素值的方法,其中包含了H.264標準所支持的所有熵編碼方法:
語法元素描述符 | 編碼方法 |
---|---|
b(8) | 8位二進制比特位串固灵,用于描述rbsp_byte() |
f(n) | n位固定模式比特位串捅伤,從最左bit開始計算 |
u(n) | 使用n位無符號整數(shù)表示,由n位bit換算得到 |
i(n) | 使用n位有符號整數(shù)表示巫玻,由n位bit換算得到 |
ue(v) | 使用無符號指數(shù)哥倫布編碼 |
se(v) | 使用有符號指數(shù)哥倫布編碼 |
te(v) | 使用截斷指數(shù)哥倫布編碼 |
me(v) | 使用映射指數(shù)哥倫布編碼 |
ce(v) | 上下文自適應(yīng)的變長編碼 |
ae(v) | 上下文自適應(yīng)的二進制算術(shù)編碼 |
常用的指數(shù)哥倫布編碼通炒砸洌可以分為四類:ue(v)、se(v)仍秤、me(v)蘸际、te(v)。其中無符號指數(shù)哥倫布編碼ue(v)是其他編碼方式的基礎(chǔ)徒扶,其余幾種方法基本可以由ue(v)推導得出粮彤。
3.指數(shù)哥倫布編碼同哈夫曼編碼的比較
指數(shù)哥倫布編碼同前文中提到的哈夫曼編碼都遵循了同一規(guī)律,即針對不同的碼元分配了bit位長度不同的碼字姜骡,因此各自都屬于變長編碼的一種导坟。然而二者仍然具有較大的差別,具體如:
哈夫曼編碼在編碼過程中考慮了信源各個符號的概率分布特性圈澈,根據(jù)符號的概率分布進行編碼惫周,因此對于不同的信源,即使是相同的符號的哈夫曼編碼的結(jié)果也是不同的康栈;指數(shù)哥倫布編碼針對不同的信源采用的編碼是統(tǒng)一的递递,因此無論是什么樣的輸入,輸出的編碼后的數(shù)據(jù)都是一致的啥么。
由于哈夫曼編碼是針對信源特性進行的編碼登舞,因此在存儲或傳輸編碼后的數(shù)據(jù)之前必須在前面保存一份碼表供解碼段重建原始信息使用;而指數(shù)哥倫布編碼不需要存儲任何額外信息就可以進行解碼悬荣。
由于未考慮信源的實際特性菠秒,指數(shù)哥倫布編碼的壓縮比率通常比較低,對于有些信息甚至完全沒有壓縮效果氯迂,輸出數(shù)據(jù)比原始數(shù)據(jù)更大践叠,在這一點上哈夫曼編碼作為“最優(yōu)編碼”在效率上更高言缤;然而由于哈夫曼編碼運算較指數(shù)哥倫布編碼更為復雜,且必須保存碼表信息增加了傳輸負荷禁灼,也對壓縮比率造成了不利影響管挟。
實際上,對于視頻壓縮這樣的需求而言弄捕,類似于哈夫曼編碼所提供的壓縮比率的優(yōu)勢遠遠不夠哮独,而且像H.264等編碼標準都不會指望靠這樣的方式來提高壓縮比率。
在H.264碼流結(jié)構(gòu)(如NAL Unit察藐、Slice Header等)的解析中,大多使用定長編碼或者指數(shù)哥倫布編碼實現(xiàn)蟋软。而例如預測殘差等占據(jù)碼流大量體積的數(shù)據(jù)則必須使用壓縮率更高的算法铸本,如CAVLC和CABAC等嫩痰。