从数学训练走向算法研究

高德纳(Donald Ervin Knuth,亦译唐纳德·克努特)1938年出生于美国密尔沃基,1960年获得凯斯理工学院数学学士、硕士学位,1963年获得加州理工学院数学博士学位。他在学生时代接触 IBM 650,逐步把兴趣从单纯使用计算机扩展到理解程序和机器的工作方式。

1968年他进入斯坦福大学任教,培养研究人员并开设具体数学等课程,1974年获得图灵奖。他的重要性既来自具体研究,也来自长期写作和教学:把分散的算法经验组织为可以解释、分析和比较的知识。

参考:[1] [2]

一部长期推进的程序设计著作

《计算机程序设计艺术》(The Art of Computer Programming,简称 TAOCP)是高德纳长期投入的多卷本著作。斯坦福的历史介绍把它称为计划七卷的工程;这里的“计划”不能读成七卷已经全部出版。讨论其内容、卷次或进度时,也应区分正式卷册、分册以及特定年份的介绍。

这项工作与他倡导的算法分析相互联系:程序不仅要得到答案,还值得追问工作量如何随问题规模变化,以及不同选择为何造成差异。把实现细节变成可讨论的对象,使编程不只是技巧集合,也成为能用数学与实验逐步积累的学问。

参考:[2]

从排版难题到整段优化

对书稿排印质量的不满促使高德纳于1977年开始发展 TeX。排版并非只把字符依次放到页面上,还要决定何处换行、空白怎样伸缩,以及断词是否合适。他与 Michael F. Plass 于1981年发表的论文,提供了一个清楚的技术实例。

该方法把段落表示为盒子、可伸缩的胶和断行惩罚:盒子提供内容宽度,胶表示空白的调节余地,惩罚表达某处断开的代价。算法不在每一行放满后立即决定,而是考察整段的候选断点,通过动态规划保存合适状态下的较优方案,避免反复穷举同一部分。

所谓较优,是针对设定的宽度、可行条件和评分规则而言,并非对所有人的审美作绝对判断。这项成果也应同时署及 Plass;把论文的合作算法说成某一个人独力完成,会损失其真实研究脉络。

参考:[1] [3]

让程序与文档都便于理解

高德纳还倡导文学编程,重视人如何阅读和理解程序,而不只关心计算机能否执行。斯坦福的介绍将其列为他的重要贡献之一。这与其著书和排版实践形成呼应:知识的组织方式本身,也是计算技术的一部分。

TeX 与 LaTeX 则需要明确区分。LaTeX 项目说明,它建立在高德纳的 TeX 或相关扩展之上,最初由莱斯利·兰波特开发,后由项目团队维护。基础系统、上层文档工具和后续社区各有贡献,不能因名称相近便统统归给高德纳。

参考:[2] [4]