灵光一现的创造——霍夫曼编码
點擊上方“LiveVideoStack”關注我們
作者 | Alex
技術審校 | 趙軍
霍夫曼
聲影傳奇
#004#
作為一名科學家和老師,我真的非常執著。如果我覺得自己還沒有找到問題的最簡單解決方法,我會非常不滿意,這種不滿會一直持續,直到我找到最佳方法為止。對我來說,這就是科學家的本質。——David Albert Huffman
“那是我生命中最奇特的時刻”
1951年,麻省理工大學的Robert M. Fano教授留給學生一道選擇題:學生們可以選擇通宵達旦地復習功課,參加期末考試;或者交出一份學期論文,逃過考試一劫。在學期論文中,Fano教授布置了一個看似很簡單的問題:找到使用二進制代碼表示數字、字母或者其他符號的最佳編碼方法。學生們不知道的是,這其實是Fano教授自己正在研究的課題。
Robert M. Fano(圖片來自ETHW)
注:在這里要介紹一下Robert M. Fano教授,Fano教授出生于意大利的一個猶太家庭,父親是意大利數學家、有限幾何創始人Gino Fano;兄長Ugo Fano是一位物理學家,對理論物理做出過諸多貢獻;堂兄Giulio Racah也是一位優秀的物理學家和數學家。Fano教授本人更是以信息論方面的工作聞名,他與香農一起合作開發了香農-法諾編碼( Shannon–Fano coding),并推導出法諾不等式( Fano inequality)。他還發明了Fano 算法(Fano algorithm)并假設了Fano 度量(Fano metrics)。
一個名叫David Albert Huffman的年輕人因為不想參加期末考試,而選擇了攻堅論文。他為了完成這篇論文,花費了數月時間,研究了多種方法,但沒有一種方法可以證明是最有效的。他對發現解決方案感到絕望,開始灰心喪氣,并打算放棄這篇論文,轉而準備期末考試。
一天,正當他準備將論文筆記扔到垃圾桶中時,突然靈光一現!答案出現了!他想到了最佳編碼方法!“那是我生命中最奇特的時刻,”Huffman回顧這個時刻時說。“突然恍然大悟,猶如閃電一般 ?。”
這種方法實現了平均碼長最短的編碼,比Fano教授的方法還要好。
1952年,這位年輕人發表了他的學期論文A Method for the Construction of Minimum-Redundancy Codes。
這篇論文所描述的編碼方法改變了數據壓縮的進程,進而改變了現代人類的生活,傳真機、調制解調器、高清電視等到處都有它的身影,這種編碼方法由創造它的年輕人的名字命名,被稱為霍夫曼編碼(Huffman Coding)。
David A. Huffman
霍夫曼說,如果他一早知道自己的導師Fano和信息論之父香農都曾在最佳編碼問題上“掙扎”過,他絕無可能在25歲的年紀就解決這個問題,或者去嘗試解決這個問題。“我很幸運能在正確的時間出現在那里,而且我的教授沒有告訴過我其他優秀的人也曾苦困惱于這個問題,從而使我感到氣餒。”
? ?什么是霍夫曼編碼?
著名計算機科學家、《計算機程序設計藝術》的作者高德納曾經說過:“在計算機科學和數據通信領域,霍夫曼編碼是人們一直在使用的基本思想。”
霍夫曼編碼是一種經典的數據壓縮方法,可以壓縮圖像、音頻、表格等。這種壓縮方案主要用于JPEG和MPEG-2。
讓我們來看下方的字符串:
A DEAD DAD CEDED A BAD BABE A BEADED ABACA BED這里一共有46個字符,每個字符占8個比特,所以一共有46*8=368個比特。如果我們使用霍夫曼編碼的話,可以將這368個比特壓縮到更小的尺寸。
在上面的字符串中,如果我們使用等長編碼(Equal Length Code),將每個字符設計成長度為3的二進制編碼,將會得到46*3=138個比特(長度為138)。但等長編碼有一個弊端,即所有字符的長度相同導致編碼結果太長,占用了太多計算機空間和網絡帶寬。
所以變長編碼(Variable Length Code)應運而生,但同時也帶來一個問題:二進制編碼中,只有0和1,如果每個字符的位數不固定,則很難確定從哪里開始,以及到哪里停止,這就很容易產生歧義。雖然可以使用分隔符,但是這樣一來卻增加了消息長度。
這時,霍夫曼編碼出現了。霍夫曼編碼所使用的基本策略是:出現頻率高的字符使用較短的編碼,出現頻率低的字符則使用較長的編碼。霍夫曼編碼使用前綴碼(Prefix code)解決了前述的歧義問題,前綴碼,即表示某些特定符號的位串永遠不是代表任何其他符號的位串的前綴。
注:前綴碼(Prefix code), 有時稱為“無前綴碼(Prefix-free code)”。
這種方式通過構建霍夫曼樹(Huffman tree)來完成。
一開始所有節點都是葉子節點,包含一個字符和對應的權重——代表字符在整個字符串中出現的頻率。出現頻率最高的字符,距離樹的根節點最近。兩個最小權重的節點創建一個新節點,新節點的權重為其子節點的權重之和,然后我們再在這個新節點和剩余節點上應用此過程,直到剩下最后一個節點,而這就是霍夫曼樹的根節點。
我們從根節點開始,然后沿著霍夫曼樹像要編碼的字符前進。如果走了左側路徑,則標記為 0,走了右側路徑,我們則標記為 1。這樣就完成了整個霍夫曼樹的構建。整個字符串編碼后的結果如下圖步驟8所示。
最終需要消耗115比特,比368比特整整少了253比特,比138比特少了23比特。
圖片來自http://math.oxford.emory.edu/
作為對后世影響深遠的編碼方法的創造者,霍夫曼擁有怎樣的一生呢?
早年動蕩的生活
霍夫曼出生于美國俄亥俄州,他的童年并不幸福:一系列的家庭變故導致了父母的離婚,之后霍夫曼跟隨母親一起生活。據他母親告訴他,他學會說話要比其他同齡孩子整整晚了兩年,這使得大家都以為他是一個發育遲緩的孩子(霍夫曼曾將自己“遲鈍”的童年歸結于家庭的一系列變故和父母的離婚)。為了能讓霍夫曼被學校錄取,他的母親成為了一家問題兒童學校的數學老師。但是經過一系列的測試,他的母親和老師們驚奇地發現,霍夫曼在智力方面不僅沒有任何問題,而且還超出同齡人很多。
原來是霍夫曼的沉默掩蓋了他的早慧。
18歲時,霍夫曼獲得了俄亥俄州立大學電氣工程學士學位。隨后加入美國海軍,并成為一名雷達維修官,在一艘幫助清除日本和中國水域水雷的驅逐艦上服役。但這艘驅逐艦的船長經常讓霍夫曼做很多額外的工作,這些工作與他接受過的雷達、聲納、對抗措施和其他工程訓練完全無關,從而引起了霍夫曼的不滿。
“一盒 35 毫米電影膠片從上層甲板掉下來,砸傷了我的頭,這是我在戰爭中唯一一次受傷。”
兩年后,霍夫曼退役,進入俄亥俄州立大學繼續攻讀電氣工程碩士學位。但那段時間,霍夫曼常常感到非常迷茫,他看不清自己未來的方向,感覺像是被困住了一樣,只能通過旅行和登山來排遣苦悶和壓抑。
麻省理工學院(MIT)是霍夫曼的脫困之路。雖然對于申請MIT沒有抱任何希望,但霍夫曼還是幸運地被錄取了。MIT的電氣工程學院的課程豐富且廣泛,霍夫曼終于找到了歸屬,也對自己的職業目標有了清晰的認識。
當然,也是因為進入MIT學習,才有了后來聞名于世的霍夫曼編碼。
霍夫曼曾說過,這種早年動蕩不安的生活使他愛上了數學。“我喜歡整潔的東西,”他說,可能是因為我早年生活動蕩的緣故,我很喜歡以一個明確的答案來總結發生的事情。正是這種明確的秩序感驅使著霍夫曼不斷努力,最終獲得了輝煌的成就。
霍夫曼的教學生涯
1953年,霍夫曼在麻省理工學院獲得了電氣工程理學博士學位。同年,他入職MIT,成為一名大學老師。
霍夫曼能夠留校,主要得益于他的一篇博士論文,這也是他最引以為傲的論文(出乎意料,筆者以為會是霍夫曼編碼那篇論文),題目是The Synthesis of Sequential Switching Circuits,而他在MIT所教授的課程,正是開關電路。
霍夫曼編碼的成功使得霍夫曼備受矚目,同時也吸引了時任貝爾實驗室研究副總裁的William O. Baker的注意。Baker博士曾擔任過艾森豪威爾、肯尼迪、約翰遜、尼克松和里根五位總統的科學顧問,他將霍夫曼招納入了一個審查委員會,該委員會主要負責為國家安全局審查未來科技計劃。
1967年,已經是正教授的霍夫曼離開了MIT,加入了加利福尼亞大學圣克魯茲分校(UCSC,University of California,Santa Cruz)。在UCSC,霍夫曼幫助創立了計算機科學系并在1970~1973年期間擔任系主任,他在開發該系學術課程以及教師人員招聘方面,發揮了重要作用。
1994年,霍夫曼退休。
退休后的霍夫曼并沒有遠離校園,作為一名榮譽退休教授,他依然活躍在課堂,教授信息論和信號分析等課程。
?情迷折紙
圖片來自https://www.huffmancoding.com/my-uncle/scientific-american
從上世紀70年代開始,霍夫曼對折紙(Paperfolding)產生了濃厚的興趣。正如他所開發的無損壓縮方法聞名于計算機科學領域一樣,霍夫曼在折紙領域也成就非凡。
作為曲痕折紙(Curved-crease Paperfolding)的先驅人物,霍夫曼制作了幾百件曲痕折紙作品,這些作品代表了1970~1990間該領域的大部分成就,他的工作啟發了后世對曲痕折紙的進一步研究。
霍夫曼同時研究數學和折紙藝術,他的主要興趣之一就是通過精確計算,使折疊出來的結構避免給紙張施加壓力。通過數學計算,霍夫曼試圖理解,當幾個折痕同時出現在一點的時候,什么樣的角度關系才不會使紙張拉伸或者撕裂。
他曾經在論文Curvature and creases: A primer on paper中分析了曲痕折紙的數學性質,并制作了雕塑來研究這種特殊的折疊方式。
為了普及折紙知識,霍夫曼曾在麻省理工學院和斯坦福等大學講授過折紙的理論和實踐課程并多次面向公眾發表折紙藝術的演講。在1979年一次面向科學家和藝術家的演講中,他表示科學和藝術這兩個群體中的人相互交流太少。
從70年代到90年代,霍夫曼創作了大量折紙,其中既有曲痕折紙,也有直痕折紙,這些折紙優雅、美麗,堪稱藝術品。麻省理工學院博物館收錄了一系列霍夫曼的折紙模型。
下面是霍夫曼的一些作品展示。
以上圖片來自http://erikdemaine.org/papers/Huffman_Origami5/paper.pdf
霍夫曼說:“我從來沒有聲稱自己是藝術家,我甚至不確定該如何定義藝術。但我發現折紙背后的優雅數學定理很自然地使折紙呈現出一種優雅的視覺效果。”
除了折紙以外,霍夫曼還擁有很多其他愛好。
早年他從香農那里學會了騎獨輪車。離開MIT加入加州大學圣克魯茲分校以后,因為這里距離西部山區很近,所以霍夫曼經常徒步背包旅行和露營。65歲時,他又愛上了浮潛和人體沖浪。
?成就非凡
霍夫曼的成就為他贏得了無數獎項和榮譽。1999年,他獲得了電氣和電子工程師協會 (IEEE) 頒發的理查德·漢明獎章(Richard Hamming Medal),以表彰他對信息科學的杰出貢獻。他因其關于時序開關電路的博士論文獲得了富蘭克林研究所的 Louis E. Levy Medal,他還獲得了俄亥俄州立大學的杰出校友獎和 W. Wallace McDowell Award。1981年, IEEE 計算機學會為他頒發了計算機先鋒獎;1998年,霍夫曼獲得了 IEEE 信息理論學會頒發的技術創新金禧獎。
1999年10月7日,經過與癌癥長達10個月的斗爭,霍夫曼離開了這個世界。
在霍夫曼的一生中,他從來沒為自己的任何一項發明創造申請過專利,雖然與億萬富翁擦肩而過,但他似乎并沒有多么失望,畢竟霍夫曼編碼還幫他逃過期末考試一劫。
References:
https://www.huffmancoding.com/my-uncle/scientific-american
https://en.wikipedia.org/wiki/David_A._Huffman
https://en.wikipedia.org/wiki/Huffman_coding
https://www.techiedelight.com/huffman-coding/
http://math.oxford.emory.edu/site/cs171/huffmanCoding/
http://erikdemaine.org/papers/Huffman_Origami5/paper.pdf
最后感謝趙軍老師推薦本期聲影傳奇人物——霍夫曼。
掃描圖中二維碼或點擊閱讀原文
了解大會更多信息
喜歡我們的內容就點個“在看”吧!
總結
以上是生活随笔為你收集整理的灵光一现的创造——霍夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音视频技术开发周刊:FFmpeg内置的一
- 下一篇: 【今晚8点】:对话微帧科技Zoe Liu