作者簡介
作者:(美國)高德納(Donald E.Knuth)
高德納,1938年1月10日出生於美國明尼蘇達州的米爾沃基,著名計算機科學家,算法與程式設計技術的先驅,史丹福大學計算機系榮譽退休教授,計算機排版系統TFX和ME_『AFONT字型系統的發明人,最年輕的圖靈獎得主。他在計算機科學及數學領域出版和發表了多部具有廣泛影響的著作和論文。
他獲得了很多獎項和榮譽:
1971年獲首屆美國計算機協會(ACM)Grace Murray lopper獎
1973年當選為美國科學藝術學院院士
1974年獲美國計算機協會圖靈獎
1975年當選為美國國家科學院院士,同年榮獲美國數學協會(MAA)福特獎(Lester R. Ford Award)
1979年獲卡特總統頒發的美國科學獎
1981年當選為美國工程院院士
1982年獲計算機先鋒獎(Computer Pioneer Award)
1982年成為IEEE榮譽會員
1986年榮獲美國數學學會(AMS)斯蒂 爾獎(Steele Award)
1988年獲富蘭克林獎章(Franklin Medal)
1994年獲瑞典科學院Adelskold獎
1995年獲IEEE馮·諾依曼獎
1996年獲稻盛基金會京都獎(Kyoto Prize)
Knuth的中文名字高德納廣為人知,這是1 977年他訪問中國之前由姚期智教授的夫人姚儲楓所取。
內容簡介
《電腦程式設計藝術?卷1:基本算法(英文版?第3版)》適合從事計算機科學、計算數學等各方面工作的人員閱讀,也適合高等院校相關專業的師生作為教學參考書,對於想深入理解計算機算法的讀者,是一份必不可少的珍品。
媒體評論
這一多卷本的鴻篇巨著被公認為是對經典計算機科學的權威論述,數十年來,前3卷一直是廣大學生、研究人員和業內人士學習程式設計理論和實踐的無價之寶。
這是一部包含一切基礎算法的寶典,是它教給了這一代軟體開發人員關於電腦程式設計的
絕大多數知識。
——Byte雜誌1995年9月刊
無數的讀者談到過Knuth的著作對於自己的深刻影響。從事研究的人驚訝於他精美優雅的分析,而普通程式設計師則一直在卓有成效地利用書中提供的各種方案解決日常問題。這些書展現了作者的博觀、清晰、精確和幽默,所有的人都欽佩不已。
我簡直說不清楚這些書給我的學習和娛樂帶來了多少歡樂時光。我在各種場合一有空就仔細
研讀,在車上,在餐館,上班時,回到家裡……甚至有次觀看我兒子的球賽,趁他沒上場的時候,
我還拿出來看了一陣子。
——Charles Long
它本來是當參考書寫的,但有些人卻發現每一卷都可以興致勃勃地從頭讀到尾。有位中國的程式設計師甚至把它比做讀詩。
如果你自以為是一個很好的程式設計師,請去讀讀Knuth的《電腦程式設計藝術》吧……要是你
真把它讀下來了,就毫無疑問可以給我遞簡歷了。
——比爾·蓋茨
不管你的背景如何,只要你想認真地編寫電腦程式,都有很好的理由把這套書的每一卷抱回家,便於研究和工作時隨時翻閱。
20年來Knuth第一次全部修訂了這3卷。我發現,只要翻一翻這些書,就會立竿見影地“鎮住”
計算機。
——Jonathan Laventhol
目錄
Chapter 1 Basic Concepts 1
1.1 Algorithms 1
1.2 Mathematical Preliminaries 10
1.2.1 Mathematical Induction 11
1.2.2 Numbers, Powers, and Logarithms 21
1.2.3 Sums and Products 27
1.2.4 Integer Functions and Elementary Number Theory 39
1.2.5 Permutations and Factorials 45
1.2.6 Binomial Coefficients 52
1.2.7 Harmonic Numbers 75
1.2.8 Fibonacci Numbers 79
1.2.9 Generating Functions 87
1.2.10 Analysis of an Algorithm 96
*1.2.11 Asymptotic Representations 107
*1.2.11.1 The O-notation 107
*1.2.11.2 Euler's summation formula 111
*1.2.11.3 Some asymptotic calculations 116
1.3 MIX 124
1.3.1 Description of MIX 124
1.3.2 The NIX Assembly Language 144
1.3.3 Applications to Permutations 164
1.4 Some Fundamental Programming Techniques 180
1.4.1 Subroutines 180
1.4.2 Coroutines 193
1.4.3 Interpretive Routines 200
1.4.3.1 A NIX simulator 202
*1.4.3.2 Trace routines 212
1.4.4 Input and Output 215
1.4.5 History and Bibliography 229
Chapter 2 Information Structures 232
2.1 Introduction 232
2.2 Linear Lists 238
2.2.1 Stacks, Queues, and Deques 238
2.2.2 Sequential Allocation 244
2.2.3 Linked Allocation 254
2.2.4 Circular Lists 273
2.2.5 Doubly Linked Lists 280
2.2.6 Arrays and Orthogonal Lists 298
2.3 Trees 308
2.3.1 Traversing Binary Trees 318
2.3.2 Binary Tree Representation of Trees 334
2.3.3 Other Representations of Trees 348
2.3.4 Basic Mathematical Properties of Trees 362
2.3.4.1 Free trees 363
2.3.4.2 Oriented trees 372
*2.3.4.3 The "infinity lemma" 382
*2.3.4.4 Enumeration of trees 386
2.3.4.5 Path length 399
*2.3.4.6 History and bibliography 406
2.3.5 Lists and Garbage Collection 408
2.4 Multilinked Structures 424
2.5 Dynamic Storage Allocation 435
2.6 History and Bibliography 457
Answers to Exercises 466
Appendix A Tables of Numerical Quantities 619
1. Fundamental Constants (decimal) 619
2. Fundamental Constants (octal) 620
3. Harmonic Numbers, Bernoulli Numbers, Fibonacci Numbers 621
Appendix B Index to Notations 623
Index and Glossary 628