基本信息
作者:(美)Jon Bentley
譯者:錢麗艷 劉田
叢書名: 圖靈程式設計叢書
出版社:人民郵電出版社
ISBN:9787115251510
出版日期:2011 年5月
開本:16開
頁碼:1
版次:1-1
編輯推薦
經久不衰的計算機科學名著
集深邃思想、實戰技術與趣味軼事於一冊
領略計算機科學之美
內容簡介
《編程珠璣:續》是計算機科學方面的經典名著《編程珠璣》的姊妹篇,講述了對於程式設計師有共性的知識。書中涵蓋了程式設計師操縱程式的技術、程式設計師取捨的技巧、輸入和輸出設計以及算法示例,這些內容組成一個有機的整體,如一串串珠璣展示給程式設計師。本書適合各級程式設計師閱讀參考。
作譯者
Jon Bentley 世界著名計算機科學家,被譽為影響算法發展的十位大師之一。他先後任職於卡內基-梅隆大學(1976~1982)、貝爾實驗室(1982~2001)和 Avaya實驗室(2001年至今)。在卡內基-梅隆大學擔任教授期間,他培養了包括TCL語言設計者John Ousterhout、Java語言設計者James Gosling、《算法導論》作者之一Charles Leiserson在內的許多計算機科學大家。2004年榮獲Dr. Dobb’s程式設計卓越獎。
目錄
《計算機編程珠璣》
第一部分 編 程 技 術
第1 章 性能監視工具 3
1 1 計算素數 3
1 2 使用性能監視工具 7
1 3 專用的性能監視工具 8
1 4 開發性能監視工具 10
1 5 原理 11
1 6 習題 11
1 7 深入閱讀 12
第2 章 關聯數組 13
2 1 awk 中的關聯數組 13
2 2 有窮狀態機模擬器 16
2 3 拓撲排序 17
2 4 原理 20
2 5 習題 21
2 6 深入閱讀 22
第3 章 程式設計師的懺悔 23
3 1 二分搜尋 24
3 2 選擇算法 26
3 3 子程式庫 28
3 4 原理 30
3 5 習題 31
第4 章 自描述數據 33
4 1 名字—值對 33
4 2 記錄來歷 36
4 3 排序實驗 37
4 4 原理 39
4 5 習題 39
第二部分 實 用 技 巧
第5 章 劈開戈爾迪之結 43
5 1 小測驗 43
5 2 解答 44
5 3 提示 44
5 4 原理 47
5 5 習題 48
5 6 深入閱讀 49
5 7 調試(邊欄) 49
第6 章 計算機科學箴言集 51
6 1 編碼 52
6 2 用戶界面 53
6 3 調試 53
6 4 性能 54
6 5 文檔 56
6 6 軟體管理 56
6 7 其他 58
6 8 原理 58
6 9 習題 58
6 10 深入閱讀 60
第7 章 粗略估算 61
7 1 頭腦熱身 61
7 2 性能的經驗法則 62
7 3 little 定律 64
7 4 原理 65
7 5 習題 66
7 6 深入閱讀 67
7 7 日常速算(邊欄) 67
第8 章 人員備忘錄 69
8 1 備忘錄 69
8 2 原理 71
8 3 深入閱讀 71
第三部分 人性化i/o
第9 章 小語言 75
9 1 pic 語言 76
9 2 視角 79
9 3 pic 預處理器 81
9 4 用來實現pic 的小語言83
9 5 原理 87
9 6 習題 88
9 7 深入閱讀 89
第10 章 文檔設計 91
10 1 表格 92
10 2 三條設計原則 94
10 3 插圖 94
10 4 文本 96
10 5 合適的媒介 98
10 6 原理 100
10 7 習題 101
10 8 深入閱讀 101
10 9 次要問題目錄(邊欄) 101
第11 章 圖形化輸出 103
11 1 實例研究 103
11 2 顯示結果取樣 105
11 3 原理 107
11 4 習題 108
11 5 深入閱讀 110
11 6 拿破崙遠征莫斯科(邊欄) 110
第12 章 對調查的研究113
12 1 有關民意調查的問題113
12 2 語言 114
12 3 圖片 117
12 4 原理 119
12 5 習題 120
第四部分 算 法
第13 章 絕妙的取樣 123
13 1 取樣算法一瞥 123
13 2 floyd 算法 124
13 3 隨機排列 125
13 4 原理 127
13 5 習題 127
13 6 深入閱讀 128
第14 章 編寫數值計算程式129
14 1 問題 129
14 2 牛頓疊代 130
14 3 良好的起點 132
14 4 代碼 133
14 5 原理 135
14 6 習題 135
14 7 深入閱讀 137
14 8 數值算法的力量(邊欄) 137
第15 章 選擇 141
15 1 問題 141
15 2 程式 142
15 3 運行時間分析 145
15 4 原理 148
15 5 習題 149
15 6 深入閱讀 151
附錄a c 和awk 語言 153
附錄b 子程式庫 157
部分習題答案 165
索引 181
譯者序
本書作者Jon Bentley是美國著名的程式設計師和計算機科學家,他於20世紀70年代前後在很有影響力的《ACM通訊》(Communications of the ACM)上以專欄的形式連續發表了一系列短文,成功地總結和提煉了自己在長期的計算機程式設計實踐中積累下來的寶貴經驗。這些短文充滿了真知灼見,而且文筆生動、可讀性強,對於提高職業程式設計師的專業技能很有幫助,因此該專欄大受讀者歡迎,成為當時該學術期刊的王牌欄目之一。可以想像當時的情形,頗似早年金庸先生在《明報》上連載其武俠小說的盛況。後來在ACM的鼓勵下,作者經過仔細修訂和補充整理,對各篇文章做了精心編排,分別在1986年和1988年結集出版了Programming Pearls(《計算機編程珠璣》)和More Programming Pearls(《計算機編程珠璣(續)》)這兩本書,二者均成為該領域的名著。《計算機編程珠璣(第2版)》在2000年問世,書中的例子都改用C語言書寫,並多處提到如何用C++和Java中的類來實現。《計算機編程珠璣(續)》雖未再版,例子多以Awk語言寫成,但其語法與C相近,容易看懂。
作者博覽群書,旁徵博引,無論是計算機科學的專業名著,如《電腦程式設計藝術》,還是普通的科普名著,如《啊哈!靈機一動》,都在作者筆下信手拈來、娓娓道出,更不用說隨處可見的作者自己的真知灼見了。如果說《電腦程式設計藝術》這樣的巨著代表了程式設計師們使用的“坦克和大炮”一類的重型武器,這兩本書則在某種程度上類似於魯迅先生所說的“匕首與投槍”一類的輕型武器,更能滿足職業程式設計師的日常需要。或者說前者是武俠小說中提高內力修為的根本秘籍,後者是點撥臨陣招數的速成寶典,二者同樣都是克敵制勝的法寶,缺一不可。在無止境地追求精湛技藝這一點上,程式設計師、數學家和武俠們其實是相通的。
在美國,這兩本書不僅被用作大學低年級數據結構與算法課程的教材,還用作高年級算法課程的輔助教材。例如,美國著名大學麻省理工學院的電氣工程與計算機科學開放式核心課程算法導論就將這兩本書列為推薦讀物。這兩本書覆蓋了大學算法課程和數據結構課程的大部分內容,但是與普通教材的側重點又不一樣,不強調單純從數學上進行分析的技巧,而是強調結合實際問題來進行分析、套用和實現的技巧,因此可作為大學計算機專業的算法、數據結構、軟體工程等課程的教師參考用書和優秀課外讀物。書中有許多真實的歷史案例和許多極好的練習題以及部分練習題的提示與解答,非常適合自學。正如作者所建議的那樣,閱讀這兩本書時,讀者需要備有紙和筆,最好還有一台計算機在手邊,邊讀邊想、邊想邊做,這樣才能將閱讀這兩本書的收益最大化。
人民郵電出版社引進著作權,同時翻譯出版了《計算機編程珠璣(第2版)》和《計算機編程珠璣(續)》,使這兩個中譯本珠聯璧合,相信這不僅能極大地滿足廣大程式設計師讀者的需求,還有助於提高國內相關課程的授課質量和學生的學習興趣。
本書主要由錢麗艷和劉田翻譯,翻譯過程中得到了嚴浩、李梁、任鐵男三位研究生的幫助,在此一併表示感謝。由於本書內容深刻,語言精妙,而譯者的水平和時間都比較有限,錯誤和不當之處在所難免,敬請廣大讀者批評指正。
前言
計算機計算機編程充滿樂趣,有時候,它又是一門優雅的科學,還要靠它去開發和使用新的軟體工具。計算機編程與人息息相關:客戶實際想解決什麼問題?如何讓用戶容易與程式溝通?是計算機編程讓我接觸到相當廣泛的話題,從有機化學到拿破崙戰爭。本書描述了計算機編程的所有這些方面的知識,而且遠不止這些。
這是一部短文集,每篇短文獨立成章,但所有短文又依據邏輯分成了幾組。第1章至第4章描述操縱程式的技術;第5章至第8章給出了一些程式設計師的實用技巧,這是本書技術性最低的部分;第9章至第12章講解輸入和輸出設計;第13章至第15章介紹了3個有用的子程式。這些分類主題在每個部分的引言中進行了詳細說明。
本書大多數章都是以我在《ACM通訊》雜誌中的“計算機編程珠璣”(Programming Pearls)專欄文章為基礎的。各部分的引言中描述了這些文章的發表歷史。既然已經發表過,為什麼我還要費勁寫這本書呢?自首次發表以來,這些專欄文章發生了很大變化,有了數千處小改進:有了新的問題和解決方案,糾正了小錯誤,並採納了很多讀者的意見。與此同時,我刪除了一些舊的內容以免重複,並加入了很多新的內容,其中有一章是全新的。
然而,寫本書的最大理由是,我想把各章組成一個有機的整體,我想展示一整串珠璣。我1986年出版的《計算機編程珠璣》是類似的13篇短文的結集,圍繞性能這箇中心主題來組織,該主題在最早兩年的《ACM通訊》專欄中占據了突出位置。本書中也有幾章再次談及效率的話題,但全書考察的計算機編程領域範圍要大得多。
讀者閱讀本書時不要太快,一次一章,仔細地讀。試解一下書中提出的問題——有些問題並不像看起來那樣容易。有些章末尾的“深入閱讀”並不是學術意義上的參考文獻列表,而是我推薦的一些好書,這些書是我個人藏書的重要部分。
我很高興能藉此機會感謝許多人所作的重要貢獻。Al Aho、Peter DENNING、Brian Kernighan和Doug McIlroy對各章提出了詳細意見。我還要感謝以下諸位提出有益的見解:Bill Cleveland、Mike Garey、Eric Grosse、Gerard Holzmann、Lynn Jelinski、David Johnson、Arno Penzias、Ravi Sethi、Bjarne Stroustrup、Howard Trickey和Vic Vyssotsky。感謝允許我引用他們信件的幾個人,特別是Peter Denning、Bob Floyd、Frank Starmer、Vic Vyssotsky和Bruce Weide。我特別要感謝ACM鼓勵我把專欄文章出版成書,還要感謝《ACM通訊》的許多讀者,他們對原始專欄文章提出了不少意見,使得本書這個擴充版本的出版十分必要。貝爾實驗室(特別是其計算科學研究中心)在我寫這些專欄文章時,提供了極佳的支持環境。感謝所有的人。
媒體評論
“《計算機編程珠璣》是對我職業生涯影響最大的書之一,其中的許多真知灼見多年之後仍然使我受益匪淺。Jon在《計算機編程珠璣(續)》中組織了更多素材,諸多內容讓我耳目一新。”
——Steve McConnell,軟體工程大師,IEEE Software前主編,《代碼大全》作者
“對每一位遇到的程式設計師,我都會毫不遲疑地建議他閱讀並不斷重讀這部經典之作。”
——Slashdot