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/