计算机界的牛人前辈

Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最先版本的BSD。他仍是vi和csh的做者。固然,Csh Programming Considered Harmful 是另外一个话题乐。听说他想看看本身能不能写个操做系统,就在三天里写了个本身的Unix, 也就是BSD的前身。固然是传说了,但足见他的功力。另外一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时仍是研究生的B伯伯怒了,拒绝把BBN TCP/IP加入BSD,由于他以为BBN的TCP/IP写得很差。因而B伯伯出手了,端的是一箭封喉,很快就写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知他们的代码还不如一个研究生的好。因而他们开会。只见当时B伯伯穿个T-shirt出如今会议室(当时穿T-shirt不象如今,仍是至关散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,你读协议,而后编程就好了。最令偶晕倒的是,B伯伯硕士毕业 后决定到工业界发展,因而就到了当时只有一间办公室的Sun, 而后他就把Sparc设计出 来乐。。。象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同事说,通常开会的时候B伯伯老是拿一堆杂志漫不经心地读。但每每在关键之处,B伯伯发言,直切要害,提出 漂亮的构想,让同事们完全崩溃。对了,他仍是Java Spec和JINI的主要做者之一。程序员

John Carmack,ID Software的founder和Lead Programmer。上个月和一个搞图形的师兄聊天,他居然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein, 而后再接再励,doom, doomII, Quake...每次都把3-D技术推到极限。J哥哥的简历上说本身的专长是"Exhaust 3-D technology",真是牛人之言不我欺的说。作J哥哥这样的人是很幸福的,由于各大图形卡厂家一有了新产品就要向他“进贡” ,否则若是他的游戏不支持哪一种卡,哪一种卡基本就会夭折乐。当初MS的Direct3D也得听取 他的意见,修改了很多API。固然,J哥哥在结婚前十数年如一日地天天编程14小时以上, 也是偶们凡人可望不可即的。对了,J哥哥高中肆业(?),能够说是自学成才。不过呢,谁要用这个例子来为本身学习很差辩护,就大错特错了。那Leonardo Da Vinci仍是自学成才呢(人是私生子,不能上学)。普通人和天才仍是有区别的。对了,其实偶们叫“达分奇”是至关不对的,由于Vinci是地名,而Da Vinci就是从Vinci来的人的意思。换句话说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da Vinci”就不知所谓乐。嗯,扯远了,打住。面试

David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具有基本功能的bootable kernel写出来,而后说:“who can't write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管理1500名开发员,本身还兼作设计和编程,不改coder本色啊。算法

D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。 平常交谈F-word不离口。他面试秘书时必问:"what do you think of the word 'fuck'?" ,让无数美女刹羽而归。终于有一天,一个一样火爆的女面对这个问题脱口而出:"That's my favorite word"。因而她被录取乐,为D爷爷工做到NT3.5发布。数据库

Don Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到Anders Hejlsberg,或者学Linux不知道Linus Torvalds同样,不可原谅啊。为了让文章完整,就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各类稀奇古怪的编译器挣外快了。他卖给别人时收一两千美圆,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,学者本色的说。想一想那但是60年代初啊,高爷爷写编译器写多了,顺带就搞出了个Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan Kay得众多高高手参加)老是第一,写的Tex到86年就code freeze,还附带2^n美分奖励等等都是耳熟能详的,偶就不饶舌乐。编程

顺便说一下,高老大爷是无可争议的写做高手。他给Concrete Mathematics 写的前言可谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,并且没有学究气,不失轻快跳脱。记得几年前读Concrete Mathemathics,时不时开怀大笑,让老妈极其郁闷,以为我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那彻底是高爷爷的功劳。说到写做高手,不能不提Stephen A. Cook。他的文章当年就被咱们的写做老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,老是面带谦和的微笑,很有仙风道骨,正好和他的仙文相配的说。网络

高爷爷其实仍是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐献了好多做品,均可以在网上看到,好比著名的Mathematical Writing,MMIXWare,The Tex Book等,更不用说足以让他流芳百世的Tex乐。数据结构

Ken Thompson,C语言前身B语言的做者,Unix的发明人之一(另外一个是Dennis M. Riche老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的做者之一, 操做系统Plan 9的主要做者(另外一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年仍是计算机史前时代,普通人都认为只有大型机才能运行通用的操做系统,小型机只有高山仰止的份儿。至于用高级语言来写操做系统,更是笑谈。Ken爷爷天然不是池中物,因而他和DMR怒了,在1969年到1970间用汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重写,因而C在随后20年成就了不知多少豪杰的梦想和光荣。并发

Ken爷爷还有段佳话: 装了UNIX的PDP-11最先被安装在Bell Lab里供你们平常使用。很快你们就发现Ken爷爷总能进入他们的账户,得到最高权限。Bell Lab里的科学家都心比天高,固然被搞得郁闷无比。因而有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,而后从新编译了整个UNIX。就在你们都觉得“这个世界清净了”的时候,他们发现Ken爷爷仍是垂手可得地拿到他们的账户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷了14年,直到Ken爷爷道出个中原因。原来,代码里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码,就自动生成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译器。机器学习

Rob Pike, AT&T Bell Lab前Member of Technical Staff ,如今google研究操做系统 。罗伯伯是Unix的先驱,是贝尔实验室最先和Ken Thompson以及Dennis M. Ritche开发 Unix的猛人,UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小脸 ,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是,罗伯伯仍是1980年奥运会射箭的银 牌得主。他仍是个颇为厉害的业余天文学家,设计的珈玛射线望远镜差点被NASA用在航天 飞机上。他仍是两本经典,The Unix Programming Environment 和 The Practice of Programming 的做者之一。若是初学者想在编程方面精益求精,实在该好好读读这两本书 。它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统,而且是著名 的blit 终端的做者。固然了,罗伯伯仍是号称锐意革新的操做系统,Plan9,的主要做者 。惋惜的是,Plan9并无引发多少人的注意。罗伯伯一怒之下,写出了振聋发聩的雄文 Systems Software Research is Irrelevant,痛斥当下系统开发的不思进取,固步自封 的弊病。虽然这篇文章是罗伯伯含忿出手,很有偏激之词,但确实道出了系统开发的无奈 :开发周期愈来愈长,代价愈来愈大,用户被统一到少数几个系统上,结果愈来愈多的活 动是测量和修补,而真正的革新愈来愈少。
就在罗伯伯郁闷之极的时候,google登门求贤来乐。若是说如今还有一家大众公司在竭尽全力地把系统开发推向极致的话,也就是google乐。随便看看google的成果就知道了。具 有超强容错和负载平衡能力的分布式文件系统GFS (如今可以用100,000台廉价PC搭起一个巨型分布系统,而且高效便宜地进行管理的系统也很少哈),大规模机器学习系统(拼写检查,广告匹配,拼音搜寻。。。哪一个都很牛的说),更不用说处理海量并行计算的各式google服务了。Rob在System Software Research is Irrelevant里萧瑟地说如今没有人再关心系统研究的前沿成果了。想不到他错了,应为google关心。google网络了大批功成老是试图吸收系统研究的最新成果。想必Rob Pike在google很幸福。愿他作出更棒的系统 1.Don E. Knuth 伟大的智者——Don E.Knuth,中文名:高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。通常说来,不知道此人的程序员是不可原谅的。其经典著做《计算机程序设计艺术》更是被誉为算法中“真正”的圣经,像KMP和LR(K)这样使人难以想象的算法,在此书比比皆是。难怪连 Bill Gates都说:“若是能作对书里全部的习题,就直接来微软上班吧!” 对于Don E.Knuth本人,一辈子中得到的奖项和荣誉不可胜数,包括图灵奖,美国国家科学金奖,美国数学学会斯蒂尔将(AMS Steel Prize),以及发明先进技术荣获的极受尊重的京都奖(KyotoPrize)等等,写过19部书和160余篇论文,每一篇著做都能用影响深远来形容。 Don E.Knuth也被公认是美国最聪明的人之一。当年他上大学的时候,常写些各类各样的编译器来挣外快,只要是他参加的编程比赛,老是第一名,同时也是世上少有的编程达到40年以上的程序员之一。他除了是技术与科学上的泰斗外,更是无可非议的写做高手,技术文章堪称一绝,文风细腻,讲解透彻,思路清晰并且没有学究气,估计这也是《计算机程序设计艺术》被称为圣经的缘由之一。数据结构和算法

2.Edsger Wybe Dijkstra 谦逊的长者——Edsger Wybe Dijkstra,1930年出生于荷兰阿姆斯特丹,2002年逝世于荷兰纽南。他在祖国荷兰得到数据和物理学学士,理论物理博士学位,2000年退休前一直是美国Texas大学的计算机科学和数学教授。以发现了图论中的最短路径算法(Dijkstra算法)而闻名于世,1972年由于ALGOL第二代编程语言而得到图灵奖。“Go To Statement Considered Harmful”(EWD215)也是被广为传颂的经典之做。除了科学研究以外,他最喜欢作的事情就是教学,被人称做“一天教学24小时”的教授。且不说Dijkstra算法对计算科学,网络科学发展的深远影响,单从他在1972年得到图灵奖时的演讲“The Humble Programmer”就不得不肃然起敬,在得到计算机科学中至高无上的奖项时,Edgs Wybe Dijkstra仍然称本身不过是一个谦逊普通的程序员,何等胸襟,举世之中几人可比。

 

3.George Dantzig 运筹学大师——George Dantizig可谓是由父亲一手培养出的天才。George的父亲是俄国人,曾在法国师从著名的科学家Henri Poincar e。他曾经这样回忆本身的父亲:“在我仍是个中学生时,他就让我作几千道几何题……解决这些问题的大脑训练是父亲给个人最好礼物。这些几何题,在发展我分析能力的过程当中,起了最最重要的做用。” 在伯克利学习的时候,有一天George上课迟到,只看到黑板上写着两个问题,他只当是课堂做业,随即将问题抄下来并作出解答。六个月后,这门课的老师 ——著名的统计学家Jerzy Neyman——帮助他把答案整理了一下,发表为论文,George这才发现本身解决了统计学领域中一直悬而未决的两个难题。George后来在运筹学建树极高,得到了包括“冯诺伊曼理论奖”在内的诸多奖项。他在Linear programming and extensions一书中研究了线性编程模型,为计算机语言的发展作出了不可磨灭的贡献。天妒英才,他于2005年5月13日去世。

 

4.James Cooley 推进时代前进的人——James Cooley(1926-)美国数学家,哥伦比亚大学的数学博士,以他所创造的快速傅立叶变换(FFT)而著名,不能不说是意义极其重大,FFT的数学意义不光在于使你们明白了傅立叶(Fourier)变换计算起来是多么容易,并且使得数字信号处理技术取得了突破性的进展,对于如今的网络通讯,图形图像处理等等领域的发展与前进奠基了基础。Fourier变化的意义在于将电能变为了工业的命脉,而FFT的意义更是在于他推进了整个社会信息化的进程。在 IBM研究中心中主要从事数字信号处理的研究一直到1992年退休,同时他仍是IEEE的数字信号处理委员会的成员。1980年得到ASSP's Meritorious Service Award,1984年得到ASSP Society Award以及IEEE Centennial Medal。

 

5.John Backus FORTRAN之父——John Backus早年在Hill School学习的时候由于讨厌学习,成绩一踏糊涂而不得不在暑假补课。1943年他在父亲的要求下到维吉尼亚大学学习化学,随后参军、照顾头部受伤的伤员、在医学学校学习治疗,但是最后又都放弃了。不过还好,战后Backus进入纽约哥伦比亚大学学习数学,并于1949年毕业。在毕业前夕,他跑到了麦迪逊大街的IBM计算机中心参观。事情凑巧,和导游聊天的时候Backus谈到本身正在找工做,在导游的鼓励下,他和中心一位主管的面谈,成为了一名IBM 的程序员。在IBM,Backus的才华获得了施展,发明了人类历史上第一个高级语言——FORTRAN。接着,又提出了规范描述编程语言语法的Backus- Naur xxxx(BNF)。这位当年的“差生”终于被整个计算机世界确定——美国计算机协会于1977年授予John Backus图灵奖。

 

6.Jon Bentley 实践探索先锋——Jon Bentley 1974年得到了斯坦福大学的学士学位,1976年得到北卡罗莱纳大学的硕士和博士学位。毕业后在卡耐基梅隆大学教授了6年计算机科学课程,1982年进入贝尔实验室。2001年退休后加入了如今的Avaya实验室,他还曾做为访问学者在西点军校和普林斯顿大学工做。他的研究领域包括编程技术、算法设计、软件工具和界面设计等等。 他写做过三本编程书籍,其中最著名的就是涵盖从算法理论到软件工程各类主题的Programming Pearls(《编程珠玑》),这实际上是他发表过的文章的合集。在这些文章里,Jon从工程实现的角度出发,为程序员们提供了一个个艰难问题的解决方案,犹如一颗颗闪闪发亮的珍珠。Bentley的珍珠超出了可靠工程学的范畴,利用他的洞察力和创造力为那些恼人的问题提供了独特而巧妙的解决方案。

 

7.Nicklaus Wirth Pascal之父——Nicklaus Wirth,若是说有一我的由于一句话而获得了图灵奖,那么这我的应该就是Nicklaus Wirth,这句话就是他提出的著名公式“算法+数据结构=程序”。这个公式对计算机科学的影响程度足以相似物理学中爱因斯坦的“E=MC^2”——一个公式展现出了程序的本质。 Nicklaus Wirth,1934年出生于瑞士,1963年在加州大学伯克利分校取得博士学位。取得博士学位后直接被以高门槛著称的斯坦福大学聘到刚成立的计算机科学系工做。在斯坦福大学成功的开发出Algol W以及PL360后,爱国心极强的Nicklaus Wirth于1967年回到祖国瑞士,第二年在他的母校苏黎世工学院他建立与实现了Pascal语言——当时世界上最受欢迎的语言之一。后来他的学生 Philipe Kahn毕业后和Anders Hejlsberg(Delphi之父)创办了Borland公司靠Turbo Pascal起家,很快成为了将Borland发展成为全球最大的开发工做厂商,这一切都不得不说要归工于PASCAL语言的魅力。PASCAL已经影响了整整几代的程序员,Nicklaus Wirth的思想还将会继续指引如今和之后的程序员前进的方向。

 

8.Rebort Sedgewick 算法的讲解者——Robert Sedgewick是普林斯顿大学的计算机科学教授。他仍是Adobe Systems的一名主管,也曾做为访问学者在Xerox PARC、IDA和INRIA工做。他在斯坦福大学得到博士学位。他的著做包括Algorithm in C、Algorithm in C++、Algorithm in Java等系列书籍,这些都再版屡次。“没有人可以将算法和数据结构解释得比Robert Sedgewick更清楚易懂了!”不少读过他著做的程序员这样说。 目前Robert正在研究算法设计、数据结构、算法分析等方面的基础理论。他善于经过数学方法评估和预测算法性能,设法发现算法、数据结构的通用机制,例如使用逼近方法寻找更快速更高效的算法。另外,他还将算法和图形学结合起来,例如使用可视化方法评估算法效率,算法的图形化模拟,用于出版物的高质量算法表现方法等等。

 

9.Tony Hoare 计算机领域的爵士——Tony Hoare,1934年出生于英国,1959年博士毕业于俄罗斯莫斯科国立大学,得到语言机器翻译专业学士学位。1960年发布了使他闻名于世的快速排序算法(Quick Sort),这个算法也是当前世界上使用最普遍的算法之一。 Tony Hoare在取得博士学位后,就任于Elliott Brothers,领导了Algol 60第一个商用编译器的设计与开发,因为其出色的成绩,最终成为该公司首席科学家。从1977年开始,Tony Hoare博士任职于牛津大学,投身于计算系统的精确性的研究、设计及开发。因其对Algol 60程序设计语言理论、互动式系统及APL的贡献,1980年被美国计算机协会授予“图灵奖”。 1999年在牛津大学退学后,Tony Hoare博士被微软剑桥研究院聘请担任高级程序员,从事微软剑桥研究院研究生成果的工业化应用的工做,以及协助其它研究人员进行服务于软件产业及用户的长期基础研究项目。2000年由于其在计算机科学与教育上作出的贡献被封为爵士。

 

10.Udi Manber 首席算法官——世界上还有如此奇怪的职位?可是对于Amazon乃至Google来讲,这一点也不奇怪。Udi Manber,这位前Amazon的“首席算法官”,如今是Google负责工程事务的副总裁。他研究WWW的应用程序、搜索以及隐藏在这背后的算法设计。在此期间,他与其余人共同开发了Agrep、Glimpse和Harvest等Unix上的搜索软件。1998年,Udi成为了Yahoo!的首席科学家。2002年,Amazon创造性地给了Udi“首席算法官”的职位,和Udi为Amazon的“Search Inside the Book”搜索项目所作的工做相得益彰。 Udi还由于他所著的Introduction to Algorithms——A Creative Approach而被你们称道。此外还有两位大师不在此文中,可是也必须提一下他们对计算机算法的贡献。

John Edward Hopcroft

Robert Endre Tarjan

 

1986年图灵奖由康乃尔大学机器人实验室主任约翰·霍泼克洛夫特(John Edward Hopcroft) 和普林斯顿大学计算机科学系教授罗伯特·塔扬(Robert Endre Tarjan)共享,而塔扬曾是霍泼克洛夫特的学生。这师生两人因为在数据结构和算法的分析和设计方面的许多创造性贡献而共同获此殊荣,在业界传为美谈。霍泼克洛夫特1939年10月7日生于西雅图。1961 年在西雅图大学得到电气工程学士学位之后,进入斯坦福大学研究生院深造,1962年得到硕士学位,1964年得到博士学位,也就是说只用了3年时间他就拿下了2个学位,霍泼克洛夫特的勤奋和聪颖因而可知。学成之后,霍泼克洛夫特曾前后在普林斯顿大学、康乃尔大学、斯坦福大学等著名学府工做,也曾任职于NSF(美国科学基金会)和NRC(美国国家研究院),从事对科学研究的规划和行政管理工做,但时间不长。霍泼克洛夫特成为著名的计算机科学家起源于一个十分偶然的机会。霍泼克洛夫特学习的专业是电气工程,原先对计算机科学没有多少知识,只学过一门“开关电路和逻辑设计”算多少有些关系。所以他原打算毕业后去西海岸的一所大学执教电气工程方面的课程。但就在毕业之前,有一次他偶然通过他的导师、研究神经网络的先驱和著名学者威德罗(Bernard Widrow)办公室的门口,当时,普林斯顿 大学的麦克卢斯基教授(Edward McCluskey,曾任IEEE计算机协会主席)正为筹建数字系统实验室打电话给威德罗,请他推荐博士生去那里工做。威德罗一眼瞥见从门口走过的霍泼克洛夫特,以为勤奋好学,悟性又高的这位得意门生正是一个值得推荐的人才,立即把霍泼克洛夫特叫进办公室,并把电话听筒递给了他。霍泼克洛夫特在电话里听了麦克卢斯基对普林斯顿大学拟建数字系统实验室的状况介绍,之后又前去面谈了一次,实地了解一番之后,对这一新的学科产生了兴趣,欣然接受了普林斯顿的聘任,从而改变了他一辈子的道路。 年青的霍泼克洛夫特来到普林斯顿以后接受的第一项任务是开设一门新课:自动机理论。这对他来讲是富有挑战性的,由于他以前并未接触过这个课题。面对挑战,他以极大的热情收集、钻研和消化了大量有关材料,加以分析、综合和比较。这样,在霍泼克洛夫特的努力下,有关自动机理论的一些分散、复杂的材料第一次被全面地条理化、系统化,所以他的讲课理所固然地受到了学生极大的欢迎。后来,霍泼克洛夫特和厄尔曼(J.D.Ullman)又合做编写了《形式语言及其与自动机的关系》(《formal Language and Their Relation to Automata》,Addison-Wesley,1969)一书,这本书被认为是自动机理论中有表明性的一部著做。 然而,霍泼克洛夫特更感兴趣的课题是算法。当时,算法复杂性理论虽已由哈特马尼斯(J.Hartmanis)、斯坦恩斯(R.Stearns,这两人是1993年图灵奖得到者)和布鲁姆(M.Blam,1995年图灵奖得到者)等人奠基了基础,但对具体算法的效率和优劣的判断还没有创建起客观和明确的准则,所以,每每出现下述状况:有人公布了一个算法,给出对若干样本问题的执行时间;过了一段时间,另一我的发布“改进算法”,给出对相一样本问题的执行时间(固然比前者少)。而实际上,这极可能是因为机器性能提升或(和)语言改进所致,所谓“改进算法”其实不见得比原算法高明。霍泼克洛夫特对这种状况很不满意,决心加以解决。通过反复研究,他终于提出了一种称为“最坏状况渐近分析法”(Worst-case asymptotic analysis of algorithm),这种方法先肯定问题和大小尺度,而后把计算时间看成问题大小尺度的一个函数去算出计算时间的增加率,以此衡量算法的效率和优劣。这个方法因为与机器性能及所用语言无关,成为测量算法好坏的数学准则,被学界所普遍认同和接受。可是致使他和塔扬共同得到图灵奖的最主要贡献则是他们解决了图论算法中的一些难题。1970年,霍泼克洛夫特在康乃尔大学得到一年休假(他是1967年被另外一图灵奖得到者哈特马尼斯招至麾下的)。他决定回母校斯坦福大学到克努特(D.Knuth)教授名下作研究,由于克努特虽然只比他年长一岁,但因在1967年和 1968年连出两卷《计算机程序设计的艺术》(《The Art of Computer Programming》)而已名满天下,成为算法领域的权威。克努特知道霍泼克洛夫特对算法感兴趣并有独到看法,就把他和本身的得意门生、研究方向也是算法的塔扬安排在一个办公室,为他们的合做创造了条件。他们选择了图论中与实际应用有很大关系的图的连通性和平面性测试难题进行攻关。拿平面图来讲,它对印刷电路板设计这样一类问题有十分重要的意义。学过图论的人都知道,平面图的判断问题,在数学上已由波兰数学家库拉托夫斯基(Kuratowski) 于1930年解决。库拉托夫斯基的判据原理看似简单,但实现起来很难。对于有100个顶点的图,用普通的算法,计算机须要1万亿步才能肯定其是否为平面图!所以,寻找高效的平面图测试算法成为摆在当时计算机科学家面前的一大难题。霍泼克洛夫特和塔扬都是富有创造性的人,又都善于合做共事,所以当两朵智慧的火花碰在一块儿时,就很快迸发出耀眼的光芒!在解决这个难题的过程当中,霍泼克洛夫特首先提出了一种新的思路、新的算法,通过塔扬的反复推敲和完善,一种适于解这类问题的新的算法终于诞生了,这就是“深度优先搜索算法”(depth-first search algorithm)。利用这种算法对图进行搜索时,结点扩展的次序是向某一个分枝纵深推动,到底后再回溯,这样就能保证全部的边在搜索过程当中都通过一次,而且只通过一次,从而大大提升了效率。新算法的运行时间是线性的,也就是说时间与图的大小成正比关系,大小翻一倍,解问题所需的时间也只翻一倍。相比之下,若用库拉托夫斯基判断的老算法,那么当图的大小翻一倍时,所需时间要增长60倍以上。利用他们创造的新算法,塔扬用Algolw为一个包含900个结点和2694 条边的图编制了一个测试其平面性的程序,程序只有500行,在IBM 360/67上运行,只用了12秒就获得告终果。霍泼克洛夫特和塔扬把他们的研究成果写成论文在《Journal of the ACM》上发表,引发学术界很大的轰动。而他们创造的深度优先算法则被推广到信息检索、国际象棋比赛程序、专家系统中的冲突消解策略等许多方面。在霍泼克洛夫特和塔扬得到图灵奖的授奖仪式上,当年的计算机象棋程序比赛的优胜者就说,他的程序中使用了霍泼克洛夫特和塔扬所发明的深度优先搜索算法,这是他的程序因此能出奇制胜的关键。 在取得辉煌成功以后,霍泼克洛夫特和塔扬并不知足,他们致力于开发效率更高的算法。不久,他们又提出了一种新的数据结构叫“双堆栈叠”(pile of twin stacks),这种新的数据结构被深度优先搜索算法的优势更加发扬光大。塔扬的一个学生用这种新的数据结构和算法编写了一个Algolw程序,只有250行,在IBM 370/168上测试有8000个结点的图的平面性只用了8秒钟。 霍泼克洛夫特除了和塔扬合做取得上述成果外,在数据结构和算法方面还有其余一系列创造。好比经常使用于索引组织的著名数据结构B树(B-tree) 是一种平衡的多分树,因为对查找、插入、删除等操做能始终保持动态平衡,具备高效的特性。霍泼克洛夫特在对B树进行深刻研究之后,为了进一步提升其操做效率和空间利用率,提出了它的一种变形叫2-3树,这种树的每一个结点有2个键,每一个键都有2-3个儿子。

霍泼克洛夫特著述颇丰,除前面已经提到过的他的处女做之外,还有如下多部著做问世: 《计算机算法的设计与分析》、《数据结构和算法》、《自动机理论,语言和计算的导论》和《计算机科学:成就与机遇》。 霍泼克洛夫特最近的兴趣集中在机器人学方面,这从他现任康乃尔大学机器人实验室主任这一点上能够看出。罗伯特·塔扬1948年4月30日生于加里福尼亚州的波莫纳(Pomona)。塔扬从小就是一个富于幻想、追求新鲜事物的人。他幼时对天文学很感兴趣,梦想成为第一个登上火星的人。小学七年级时他又开始读《科学美国人》(《Scentific American》,这是美国最著名的科普杂志之一),尤为对著名数学家马丁·加德那(M.Gardner) 开设的趣味数学专栏深感兴趣(马西·加德那所著的《啊哈!灵机一动》由上海科技出版社于1981年译成中文出版,被中国科学家评为“20世纪科普佳做”之一而进行推介)。1964 年,塔扬参加一个中学生科学夏令营,第一次接触计算机,当即被神奇的计算机所吸引。所以,当他上加州理工学院时,虽然学的专业是数学,但同时还辅修了当时学校开设的全部有关计算机的课程。1969年他取得学士学位之后,进入斯坦福大学研究生院,师从著名的计算机科学家、后来在1974年荣获图灵奖的克努特。1970年,在克努特的有意安排下,他与到斯坦福来度学术假的康乃尔大学教师霍泼克洛夫特在一个办公室开始了对图论算法的共同研究。他们的这个课题其实是在有“人工智能之父”之称的麦卡锡 (J.McCarthy)的建议下进行的。当时塔扬正选修麦卡锡开设的“符号处理”(Symbolic processing)课程,学习由麦卡锡开发的第一我的工智能语言Lip。做为做业,麦卡锡让学生编写程序以验证给定的图是不是平面的,并建议学生们在程序中使用库拉托夫斯基条件。塔扬虽然一开始就意识到这样得出的算法效率过低,考虑“另起炉灶”,但不知从何入手。这时霍泼克洛夫特提出的新思路、新算法启发了他,他仔细考虑了它,并力图使霍泼克洛夫特的算法中的原则更加严密、更加完善,终于使深度优先搜索算法完美实现,取得成功。 1992年,塔扬以平面图测试的高效算法为题完成了博士论文,以优异成绩经过论文答辩取得博士学位,这时离他取得硕士学位刚刚一年。学成之后,塔扬先是跟随霍泼克洛夫特去了康乃尔大学,之后又前后在加州大学伯克利分校、母校斯坦福大学以及贝尔实验室工做过,其主要兴趣和研究方向还是和生产、生活有密切联系的一些算法问题和发现新的数据结构。塔扬到康乃尔大学后研究和解决的第一个问题是所谓“合并-搜索问题”。这也是图论算法中的一个问题。在许多图论算法中,要将图的结点分红若干不一样的组,叫作“分区”(Partition)。在算法过程当中,不一样的分区有时须要合并成较大的分区,这是合并搜索问题中的“合并”操做。算法中也常常须要判断两个结点是否属于同一分区,这是合并搜索问题中的“搜索”操做。为了提升效率,搜索操做应尽量地编短搜索路径,这叫“路径压缩”(Path compression)。这个问题看似简单,其实否则,包括一些知名学者在内的人在研究和分析这个问题的时候都犯了这样那样的错误。塔扬深刻研究了这个问题,最后利用阿克曼函数(Ackermann function,这是数学家阿克曼在1928年找到的一个可计算、但不是原始递归的函数)成功地解决并分析了“合并-搜索问题”。在研究合并-搜索问题的过程当中,塔扬还提出了所谓 “分摊”算法的概念。分摊(amortization)这个词是塔扬从财会术语中借用过来的,由于塔扬发现,有时虽然单个操做可能很费时间,但经过路径压缩却能够大大减小之后查找操做所需的时间,这就是说,一个查找操做额外作的工做能够“分摊”给从中受益的多个查找操做,所以从总体上看是提升了效率。分摊的概念将对算法的注意力从关注单个操做的时间转向关注整个操做的平均时间,在算法设计与分析中引发了一场革命。

1975年,塔扬和他的学生在斯坦福研究对于自然气和石油管道运输这类问题有很大意义的最大网络流问题。这个问题因为对经济和交通、通讯的巨大实际意义而吸引了许多学者。福特(L.Ford)和富尔克森(D.Falkerson)早在1956 年就提出了解决这个问题的第一个计算机算法,可是某些状况下效率不高,甚至没法找到正确答案。十年后埃德蒙多(J.Edmcnds)和卡泼(R.Karp,1985年图灵奖得到者)改进了这个算法,使之有更高的效率。塔扬发现,最大网络流问题的关键不在意算法自己而在于数据结构。通过艰苦探索,塔扬和他的学生终于发明了一种称为“动态树”(dynamic tree) 的新的数据结构,在此基础上他们开发成功了史无前例的最大网络流高效算法,得到了普遍采用。1980年,塔扬在贝尔实验室继续研究这一课题,将他之前提出的分摊的概念用于网络流问题,发现若是不集中于最坏状况,而去关注平均时间,也就是说不追求在最坏状况下的有效,而是追求在分摊的状况下有效,能够使最大网络流问题得到更好的结果。循着这一方向,塔扬和他的学生提出了“自调整”(self-adjusting)数据结构的概念,并发明了一种有着良好特性的新的数据结构——“八字形树”(splay tree)。目前,在算法设计中利用塔扬提出的分摊来提升效率已成为重要的方法之一。

80年代初,塔扬一方面在贝尔实验室工做,一方面在纽约大学当兼职教授。他和纽约大学的几个研究生开始了一项新的研究——研究可以长期保存信息的数据结构,即利用这种数据结构不但能够跟踪其最近的信息,还能够跟踪其过去的信息,塔扬称他们设计出来的这种数据结构为“持久性数据结构”(persistent data structure)。利用塔扬的持久性数据结构访问其当前信息的速度和一般的数据结构几乎同样快,而要得到过去的信息只须要程序付出一点点额外的代价。持久性数据结构已经在计算几何和并行处理中得到应用,但其更重要的应用领域是时态数据库(temporal database), 尤为是历史性数据库(historical database)。 塔扬因为他的一系列创造性工做而得到许多荣誉。除了图灵奖之外,1983年他被国际数学会IMU授予以著名数学家内兰林那命名的信息科学奖(Neranlinnal prize in Information Science),1984年美国科学院授予他研究创新奖(National Academy of Science Award for Initiatives in Research)。1987年和1988年他前后当选为美国科学院院士和美国工程院院士。在接受图灵奖时,霍泼克洛夫特和塔扬分别发表了演说,前者的演说题为“计算机科学:做为一门学科的出现”(Computer science:the Emergence of a Discipline),后者的演说题为“算法设计”(Algorithm Design)。两人还联合接受了记者 卡伦·弗兰克尔(Karen A.Frenkel)的采访。两篇演说及与记者的对话刊于《Communications of ACM》,1987.3.,197-222页。颁奖典礼是在德克萨斯州的达拉斯举行的1986年秋季联合计算机会议期间举行的。

参考连接:http://blog.163.com/yun_taoliu/blog/static/135700090201041314916781/

相关文章
相关标签/搜索