霍夫曼编码是最优的符号码。本文为发明者霍夫曼(David Huffman)的一篇短文,讲述了发明该编码的过程以及他的一些经历。原文见https://www.huffmancoding.com/my-uncle/david-bio

当我年轻的时候,我认为我的价值主要在于我的头脑。我十五岁高中毕业,十六岁生日刚过后就进入俄亥俄州立大学。十九岁时,我获得了第一个工程学位,在战争即将结束时,我成为了太平洋地区的一名海军军官——后来我被告知,我是海军区最年轻的军官。

我所在驱逐舰的舰长对我很反感,把所有可以想象的额外任务都甩给我。这些任务甚至与我所接受的雷达、声纳、对抗和其他工程训练无关。

我唯一的战争伤口是一箱35毫米电影胶片从上层甲板上掉下来,砸伤了脑袋。这是舰长唯一一次对我表现出关心。毕竟,他不希望他的一名军官死在他的船上——尤其是出于这样一个不光彩的理由。

两年后,当我退役时,我回到了俄亥俄州立大学,攻读了电气工程硕士学位。除了夏天在西部背包旅行和登山的时候,我还是感觉困惑。我仍然不太确定我希望我的生活走向何方。

麻省理工学院是我离开俄亥俄州的出路,但我对申请非常天真。在我天真的情况下,我甚至没有想到要申请其他地方,因为我可能不会被接受。但无论如何,我运气好,他们把我录取了。

麻省理工学院的电气工程系处理各种电气现象,从生物电信号到磁流体动力学。我开始体会到尽可能广泛的教育的价值。我也开始对自己的职业目标有了信念。

第一次博士考试失败了,这对我的自尊心是一个很大的打击。当时我对自己的能力完全沒有信心。我记得感到自己是个失败者是多么可怕。

当我放暑假回来时,我报名参加了一门开关理论(Switching Theory,相当于数字电路)课程(Robert Fano教授授课),这纯粹是偶然的。这是我第一次接触数字和离散现象的世界。从那以后,这是我度过生命中的大部分时间的世界。

MIT的Robert Fano教授

我非常幸运地通过简单的算术解决了一位经典的编码问题,而几位杰出的科学家(包括Fano、香农)都无法找到一个精确的解决方案。要是我当时知道教授都没有解决这个问题,我可能根本不会去碰它了。

问题在于将识别一组消息中的一条消息所需的平均问题数量减少到最小值。这些消息可能以不同的频率出现,而且问题必须只能用“是”或“否”回答。由于计算机和现代通信系统几乎都是基于“是/否”这样的二值系统,这种编码过程在这些应用领域具有巨大的实际意义。

我知道,如果我能解决问题,我就不必参加此课程的期末考试(Fano教授的提议)。所以我要赌一把。这个问题太令人上瘾了——但在学期结束前一周,我似乎在几周的努力中没有什么大的进展。我知道我最好快点开始复习,准备期末考试,忘记这个难题。

我记得,那天早上吃完早餐后,我把我的研究笔记扔进了废纸篓。就在那一刻,我有一种突然释放的感觉,我看到了这个难题的一个简单的模式,而在那之前我一直无法看到。结果就是我最出名的工作:霍夫曼编码。

13个符号的霍夫曼编码

从那以后,我还取得了许多突破,但从来没有像那样一下子取得过突破。这非常令人兴奋。

从那时起,我在通信信号设计、具有存储器的自动机设计、纠错码、逻辑设计和开关电路方面进行了研究,最近还研究了可能包含模糊或不可能对象的场景的逻辑分析。

作为一名科学家和教师,我非常倔强。如果我感觉到我还没有找到最简单的方法来看待问题,那么在我找到之前,我是不满意的。对我来说,这就是作为一名科学家的本质。

目前,我对柔性表面的数学性质以及表示其形状的有效方法非常感兴趣。作为这项研究的产物,我开发了自己的技术,将纸折叠成不寻常的雕刻。这最初只是一种爱好,但最近我在艺术画廊展出了我的作品。

David Huffman

我并不是声称自己是个艺术家。我甚至不知道如何定义艺术。但我发现与纸张表面相关的优雅数学定理也应该带来视觉上的优雅,这是很自然的。

也许最令人兴奋的是向艺术家和科学家介绍这项工作,并让他们都能理解和欣赏我的工作。 理论研究者很少能够在他们的学科之外进行交流,而我目前的研究使我能够做到这一点。

但我也感受到了我们信息学科教学的满足感。因为我们这个领域有时对外人来说似乎很困难,所以当你能够把问题的根本之处讲清楚时,成就感会很大。

霍夫曼自述:发明霍夫曼编码的过程相关推荐

  1. python哈夫曼树_python霍夫曼树

    class Node(): data=0 left=None right=None father=None def __init__(self,data,left,right): self.data= ...

  2. 霍夫曼算法_霍夫曼编码算法

    霍夫曼算法 In this tutorial, we'll be discussing and implementing the Huffman Coding Algorithm in Java. 在 ...

  3. 霍夫曼树(赫夫曼树、哈夫曼树)

    霍夫曼树:给定n个权值做为n个叶子节点,若该树的带权路径长度达到最小,这棵树为最优二叉树,也称赫夫曼树. 霍夫曼树中的几个概念 路径和路径长度 一棵树中,一个节点往下可以达到的孩子或孙子节点之间的通路 ...

  4. 哈夫曼树(霍夫曼树)-详解

    哈夫曼树(霍夫曼树)-详解 哈夫曼树(霍夫曼树)-详解 何为权值?我们看下百度百科的解释. 何为路径? 何为路径长度? 何为树的路径长度? 何为结点的带权路径长度? 何为树的带权路径长度(WPL)? ...

  5. 创建霍夫曼树,霍夫曼编码以及使用霍夫曼编码压缩文件

    那么,什么是霍夫曼树(赫夫曼树)呢? 给定n个权值(权值就是每个节点里面存放的数据,但是根据业务需求不同,存放的数据类型有些差别)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样 ...

  6. 霍夫曼树及霍夫曼编码的C语言实现,霍夫曼树及霍夫曼编码的C语言实现

    从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各类各样的棘手的问题,经过一遍遍在纸上分析每一步的具体状态得以解决.如今对学习霍夫曼树的过程加以记录web 首先介绍霍夫曼树数组 霍夫曼树(Huf ...

  7. Huffman霍夫曼树,霍夫曼编码

    霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...

  8. 霍夫曼树与霍夫曼编码

    霍夫曼树以及哈夫曼编码 一.什么是哈夫曼树与哈夫曼编码 编码是什么 答: 在ASCII 编码中 'a' = 97 = ( 01100001 ) 2 (01100001)_2 (01100001)2​ ...

  9. 霍夫曼树和霍夫曼编码以及霍夫曼编码的应用

    文章目录 霍夫曼树介绍 1.1霍夫曼树的定义 1.2霍夫曼树的几个概念 1.3构建霍夫曼树的过程 1.4代码实现霍夫曼树 霍夫曼编码介绍 什么是霍夫曼编码 通信领域的应用 字符串压缩 1.构造霍夫曼树 ...

最新文章

  1. 重复提交版本之后该采取的测试策略
  2. 店宝宝电脑版_起名字 测名字神器 电脑安卓全有了
  3. python回测工具_Python爬虫回测股票的实例讲解
  4. java怎么获取当前日期_JAVA中获取当前系统时间
  5. Activiti工作流6.0表结构介绍
  6. 文件字符输入流的使用 FileReader java
  7. 关于android 双击事件
  8. 微软、阿里抢占开源一线,JavaScript、Python 备受热捧,GitHub 2020 数字洞察报告揭晓!...
  9. vb如何用代码对Excel的指定区域实行保护
  10. 自动化测试元素定位“最佳实践”
  11. Mysql5.7及以上版本的MySQL下载、安装及配置教程(附图)
  12. 新路由3鸡血版固件_新路由3 V1.1版本 刷lean源码开源驱动2.4G无线测试(EEPROM重新调试了)...
  13. SpringMVC 工作原理详解
  14. PDF技术(一)-Java实现Office系列文件转PDF文件
  15. mysql(zip版)下载安装教程
  16. dna计算机开发,科学家正在开发DNA电脑
  17. LeetCode(179) Largest Number
  18. SAP 固定资产增值和减值
  19. 3 个简单的技巧让你的 vue.js 代码更优雅!
  20. 亲测好用的数据恢复软件:Disk Drill Mac中文版

热门文章

  1. linux中的管道定义,Linux 管道命令是什么?
  2. 小儿推拿22种手法(动态图)轻松解决各种常见病
  3. 解密SVM系列(一):关于拉格朗日乘子法和KKT条件
  4. pvcreate命令--Linux命令应用大词典729个命令解读
  5. Overfeat,RCNN,Sppnet 2014年三篇经典文献及其创新思路总结
  6. Linux 开机自启动多个脚本程序
  7. matlab画三维图像
  8. 我为什么要创建帮创业者找合伙人的缘创派(ycpai.com)?
  9. python 打包成为exe关于pyinstaller
  10. 春分, the Spring Equinox, the Vernal Equinox