⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 全面介绍了典型的算法
💻
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.csdn.net/develop/article/7/7070.shtm -->
<HTML><HEAD><TITLE>高 德 納 的 二 十 年 計 畫 (转 载)</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content=0 http-equiv=Expires><LINK 
href="高 德 納 的 二 十 年 計 畫 (转 载).files/news.css" rel=stylesheet>
<STYLE type=text/css>.fst {
	BACKGROUND: #eeeecc; BORDER-LEFT: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; PADDING-TOP: 0px; WIDTH: 770px
}
.fstdiv3 IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-RIGHT: #eeeecc 8px solid; BORDER-TOP: #eeeecc 6px solid
}
</STYLE>

<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 
topMargin=0 marginheight="0" marginwidth="0">
<CENTER><LINK href="news.css" rel=stylesheet>
  <TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 height=5 width=2></TD>
    <TD height=5 width=768></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 
width=770>
    <TBODY> </TBODY> 
  </TABLE>
<DIV align=center>
<DIV align=left class=fst>
<DIV class=fstdiv3 
id=print2><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
高 德 納 的 二 十 年 計 畫&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
8123033 穆信成<BR><BR><BR>高德納已經五十八歲了。&nbsp; 他打算再花二十年的時間繼續他的著作, <BR>The Art of 
Computer Programming.&nbsp;&nbsp; 大家知道&nbsp; Donald E. Knuth 
<BR>是資訊科學界公認的大宗師,&nbsp; 知道他以他的重量級著作&nbsp;&nbsp; The Art <BR>of Computer 
Programming(以下簡稱TAOCP)[2,3,4] 
聞名於世,原計<BR>畫要出七冊,但目前只完成了三冊。但也許並沒有很多人知道他還有<BR>個中文名字:「高德納」。<BR><BR>&nbsp; * * 
*<BR><BR><BR>TAOCP 這套書的名氣這麼大,敢去碰它的人反倒不多。寒假我因為一<BR>些原因,讀了高德納的另一本書 "The Stanford 
GraphBase"[1]。大<BR>師的書到底是什麼樣子呢?&nbsp; <BR><BR>高德納在序言裡說了寫這本書的原因:在寫 TAOCP 的第四冊前, 
他<BR>想要用一個叫做 ladders 的遊戲當作貫穿全書的例子。 於是寫了不<BR>少相關的程式和龐大的測試資料,最後集結成了一個程式/資料庫。 
<BR>他想這套 GraphBase 可以作為大家測試 graph 演算法的基礎,讓那<BR>些 「街上混的程式員們 
(programmers-on-the-street)」 知道電腦<BR>科學家們也會做實際的事。另外,這套程式庫全部用他鼓吹的 liter-<BR>ate 
programming 方式寫成,也可以當成一個活生生的例子。<BR><BR>最後一個,但卻是最重要的原因是,"to have 
fun".「的確,快樂是<BR>這一路上最主要的原因,但我不敢承認。電腦科學家們總是得裝出一<BR>副咬牙工作的樣子,讓別人心甘情願付給他們高薪水。但遲早這個社<BR>會得承認, 
有些工作仍然值得尊敬 --- 
即使它們比任何事情都要來<BR>得有趣。」<BR><BR>我不禁笑了。高德納在辦正事的途中岔出去做別的事情,一做就是好<BR>幾年已經不是第一次。TeX 
這個現在大家都在用的排版系統不就是他<BR>嫌 TAOCP 被排得不好看, 因此自己捲起袖子研究電腦排版的產物嗎?<BR>Tex 耗去了他十年的光陰,而這本 
Stanford GraphBase 則可以追溯<BR>到二十年前。高德納好像永遠不怕老?<BR><BR>Ladders 
這個遊戲是這樣的:挑兩個五個字母的英文單字,試試看一<BR>次一個字母,把一個字變成另外一個。但是在過程中它必須仍然是一<BR>個英文單字。比如說把 black 
變成 white 的方法是這樣的:<BR><BR>&nbsp;&nbsp;&nbsp; black -&gt; brack -&gt; brace -&gt; 
trace -&gt; trice -&gt; trite <BR>&nbsp;&nbsp;&nbsp; -&gt; write -&gt; 
white<BR><BR>大家看得出來,如果把每個單字當作一個 node,&nbsp; 兩個單字如果只差<BR>一個字母,就連一條 edge,&nbsp; 
那麼這個遊戲可以想成在兩個 node 中<BR>找一條 path . <BR><BR>但 GraphBase 有趣的地方卻是資料。 高德納收集了一個含 5757 
個<BR>單字的資料庫。他參考了 1971 年以前 Beeler 
為了這個遊戲專門編<BR>的一部字典,刪去老的字,加入新的單字。高德納花了很大篇幅解說<BR>他選字的標準:姓名不選,所以 Knuth 就沒有了;但是 
gauss 已經<BR>是一個電磁學單位,所以受錄了進去。他很耐心的等到 e-mail 終於<BR>被大家寫成 email, 
以便把他收集到資料庫中。<BR><BR>接下來就開始玩這個資料庫囉。高德納發現 5757 個單字中,有 774<BR>個 degree 是 1 
的(只有一根接出去的 edge),位居第一。Degree<BR>= 2 的也有 727 個。株連最廣的單字是 "bares" 和 "cores" , 
de-<BR>gree = 25,而 "cores" 的 25 個鄰居都是 degree 大於 9 的。 De-<BR>gree = 1 的單字中有 103 
組根本就是孤零零的兩兩成對,如 alpha-<BR>aloha, gonad-monad.&nbsp; 跑一個找 connected component 
的演算法,<BR>發現大部分的單字都在同一個有 4493 個單字的大 component 
裡面。<BR><BR>高德納自己定了一個方法橫量單字在文章中的出現頻率。 在這 5757 <BR>個單字中, "which" 是最常出現的, 其次是 
"there" 和 "their"。<BR>"often" 果然常出現,比出現("occur") 
還要常出現。<BR><BR>看來高德納真的是玩得不亦樂乎呢。"to have fun",&nbsp; 
於是我們可以<BR>想像高德納出這本書的真正原因,是他自己建了這些資料後,發現越<BR>玩越有趣,終於忍不住想出書了。<BR><BR>玩過了單字,想知道美國大學足球隊誰比較強嗎?高德納已經把 
120<BR>支隊伍的 638 場比賽建成 graph 了。 他又參考資料, 找出美國的<BR>128 
個城市之間的最短距離,並且在發現前人的資料明顯錯誤後自己<BR>寫程式來修正。把蒙娜麗莎的微笑掃描起來後,高德納示範了如何運<BR>用 bipartite 
graph matching 的技巧,用骨牌重新拼出這幅名畫。<BR><BR>高德納的文筆親切而幽默。CWeb 是他大力推廣的 literate 
program-<BR>ming 系統,他認為每個人都應該有一套。 「但是今天已經沒什麼人<BR>能永遠跟上新軟體的發行,所以如果你沒有 
CWeb,也不用覺得太有罪<BR>惡感。」 接下來他解釋如何安裝&nbsp; Stanford GraphBase,&nbsp; 這一段的 
<BR>makefile 可以給想學 make 的同學們做很好的參考。 
如果裝不起來<BR>呢?高德納問,你有沒有好好祈禱呀?最後,他希望大家能像他一樣,<BR>多用這些程式庫和資料檔做些實驗,「也許有天你也會迫不及待地想<BR>出本這樣的書呢!」<BR><BR>瀏覽了全書,我想:高德納到底是太閒,還是有用不完的精力?將近<BR>六十歲的他,仍舊充滿著旺盛的活力和赤子般的好奇心,而這一切又<BR>以他深厚的功力做為基礎。<BR><BR>* 
* *<BR><BR>四月號的 Dr. Dobb's Journal 做了一篇高德納的專訪[5]。 為什麼<BR>寫書寫到一半, 卻花了十年的時間在 Tex 
上?&nbsp;&nbsp; 他說,&nbsp; Niklaus <BR>Wirth (Pascal, Modular-2 和 Oberon 
的設計者)一直想設計飛機,<BR>但他發現他需要夠好的工具,於是他設計了一個個的電腦語言,造了<BR>自己的電腦。高德納也希望他的書能夠不因科技的進步而被淘汰,希<BR>望即使製書的科技進步,他的書仍舊是用領先的方式製作的。<BR><BR>談到另一位大師 
Edsgar Dijkstra, 他說 Dijkstra 的力量來自於他<BR>不妥協的拗脾氣。「光是想像用 C++ 
寫程式就會讓他病倒!」Dijk-<BR>stra 的拿手技巧是鉅細靡遺地用 formal 方法推導、檢驗程式, 這<BR>和工業界不斷產生數以 mega 
計的軟體,&nbsp; 但使用者卻無時不負擔著 <BR>bug 的風險的實際情況顯然有段差距。高德納則認為自己位於兩種極<BR>端的中間。一方面他贊同 
formal 方法提供的可靠性,但他也知道在<BR>大系統中這種方式的極限。他盡力維持他的軟體的品質,因此他願意<BR>提供賞金給在 TeX 中找到新 bug 
的人。<BR><BR>* * *<BR><BR>由於高德納已經不用 email 了,他有一個 Web page[6], 
<BR><BR>&nbsp;&nbsp;&nbsp; 
http://www-cs-faculty.Stanford.EDU/~knuth/<BR><BR>裡頭還有個 FAQ, 
可以看到他中文名字的圖章。大家劈頭要問的當然<BR>是:第四冊什麼時候出來呀?<BR><BR>他說,TAOCP的第四冊將會分成三部份,4A : 
Enumeration and Back-<BR>tracking, 4B : Graph and Network Algorithms 和 4C : 
Optimiza-<BR>tion and Recursion.&nbsp; 從 1997 年開始,他會以大約每 128 頁為一<BR>個單位( 
高德納好像很喜歡用 2 的乘冪做單位,他付給找出 TAOCP <BR>中錯誤的賞金也是 $65536 
分)把第四冊的部份散發給大家,聽取各<BR>方的意見。如果一切順利,第四冊將在 2003 年正式完成。第五冊的<BR>完成時間則定在 2009 
年。第五冊告一段落後,他會重新整理 
TAOCP<BR>的一到三冊,更新內容。再下一步,他將把一到五冊的重要內容全部<BR>濃縮在一本書裡。之後才著手進行六和七冊。<BR><BR>所以,高德納至少得活到 
2020 年囉....<BR><BR>為了完成 TAOCP, 高德納已經退休,過著半隱士的生活。 他不用 e-<BR>mail, 不怎麼會見訪客, 
取消大部分的演講和旅行。 他說,他得用 <BR>batch 方式工作,而不能把事情 swap 來 swap 
去的。他託人在家裡<BR>造了一座管風琴,空閒的時間裡,他就會彈彈琴自娛。如果你會彈琴,<BR>他很願意和你見個面,來個四手聯彈。<BR><BR>為什麼那麼賣力呢? 
在DDJ的專訪裡, 當被問到他是否能從 Tex 和<BR>Metafont 圖利時, 
他說,一旦一個人能夠餵飽自己,能夠有個安身<BR>之所,剩下的就是他能為別人做些什麼,如何能為群體做出一些貢獻<BR>了。<BR><BR>因此他很希望程式創作者們不要把演算法當作自己的私產。程式應該<BR>容易閱讀和了解,因為越多人能夠了解它,它才能夠發揮越大的影響<BR>力。<BR><BR>也許他也是基於這個想法繼續 
TAOCP 的寫作吧?&nbsp; 在他的 web page 
<BR>中,對於他的這件「此生的大事」,他下了這樣的註腳:「我嘗試著<BR>盡我所能的去學習電腦科學裡的一些領域,然後把這些知識摘要成大<BR>家比較容易了解的方式,讓沒有那麼多時間做這種學習的人也能夠吸<BR>收他們」。<BR><BR>為了這個目的,他必須閱讀超過二十萬頁的文件,然後把它們濃縮到<BR>兩千頁裡頭。他寫的東西並不是最流行的,但他希望他能從日新月異<BR>的新技術中,萃取出值得存活到下個世紀的東西。<BR><BR>不禁想起前陣子同學討論到的話題:專家是訓練有素的狗嗎?我們該<BR>不該成為專家?高德納毫無疑問地是個專家,但他的大師學養和風範<BR>也許能給我們不少啟發。<BR><BR>Reference<BR><BR><BR>[1] 
Donald E. Knuth, The Stanford GraphBase : A Platform for Combinatorial&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp; Computing, Addison-Wesley, 1993<BR><BR>[2] Donald 
E. Knuth, The Art of Computer Programming, Vol 1 : 
Fundamental<BR>&nbsp;&nbsp;&nbsp;&nbsp; Algorithms, Addison-Wesley, 
1973<BR><BR>[3] Donald E. Knuth, The Art of Computer Programming, Vol 2 : 
Seminumerical <BR>&nbsp;&nbsp;&nbsp;&nbsp; Algorithms, Addison-Wesley, 
1973<BR><BR>[4] Donald E. Knuth, The Art of Computer Programming, Vol 3 : 
Sorting and <BR>&nbsp;&nbsp;&nbsp;&nbsp; searching, Addison-Wesley, 
1973<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The Art of Computer Programming 
有日文,俄文,西班牙文等許多國的版本。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
其中,中文版資料如下<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chinese translation by 
Guan JiWen and Su YunLin, Pei Xue He Cha 
Zhao,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Beijing: Defense Industry 
Publishing Co., 1985<BR><BR>[5] Jack Woehr, An interview with Donald Knuth, Dr. 
Dobb's Journal, April <BR>&nbsp;&nbsp;&nbsp;&nbsp; 1996, p16-p22<BR><BR>[6] 
Donald E Knuth's WWW Page : 
http://www-cs-faculty.Stanford.EDU/~knuth/<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
http://www.geekchic.com/repliq6.htm 
也有一篇小小的訪問。高德納最喜歡的<BR>&nbsp;&nbsp;&nbsp;&nbsp; 語言是 CWeb, 
最喜歡的運動是棒球,認為有許多人是他值得崇敬的。<BR><BR>&nbsp;&nbsp;&nbsp; 
高德納將在最近將他的論文以更淺顯的方式整理過後,重新集結出版。<BR>&nbsp;&nbsp;&nbsp; 
這套書的預定讀者並不是電腦科學的專家,似乎很值得一讀。這套書<BR>&nbsp;&nbsp;&nbsp; 
將有八本,前兩冊已經出版:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>[7]&nbsp; 
Literate Programming, Stanford, California: Center for the Study of 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Language and Information, 
1992<BR>&nbsp;&nbsp;&nbsp; <BR>[8]&nbsp; Selected Papers on Computer Science, 
Stanford's Center for the Study<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of Linguistics 
and Information and Cambridge University Press, spring, 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1996<BR><BR>[9]&nbsp; Selected Papers on 
Analysis of Algorithms, to be published<BR><BR>[10] Selected Papers on Computer 
Languages, to be published<BR><BR>[11] Selected Papers on Design of Algorithms, 
to be published<BR><BR>[12] Selected Papers on Digital Typography, to be 
published<BR><BR>[13] Selected Papers on Discrete Mathematics, to be 
published<BR><BR>[14] Selected Papers on Fun and Games, to be 
published<BR><BR><BR></DIV></DIV></DIV><BR><BR>
  <BR>
  <TABLE align=center bgColor=#ffffff border=0 cellPadding=2 cellSpacing=1 
width=770>
    <TBODY> 
    <TR> 
      <TD>&nbsp;</TD>
    </TR>
    </TBODY> 
  </TABLE>
</CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -