本書是計算機科學(xué)方面的經(jīng)典名著。書的內(nèi)容圍繞程序設(shè)計人員面對的一系列實際問題展開。作者Jon Bentley 以其獨有的洞察力和創(chuàng)造力,引導(dǎo)讀者理解這些問題并學(xué)會解決方法,而這些正是程序員實際編程生涯中至關(guān)重要的。本書的特色是通過一些精心設(shè)計的有趣而又頗具指導(dǎo)意義的程序,對實用程序設(shè)計技巧及基本設(shè)計原則進行了透徹而睿智的描述,為復(fù)雜的編程問題提供了清晰而完備的解決思路。本書對各個層次的程序員都具有很高的閱讀價值。
非常有影響力的計算機科學(xué)著作之一
融深邃思想、實戰(zhàn)技術(shù)與趣味軼事于一爐的奇書
帶你真正領(lǐng)略計算機科學(xué)之美
多年以來,當(dāng)讓程序員推選喜愛的計算機圖書時,《編程珠璣》總是位于前列。正如自然界里珍珠出自細沙對牡蠣的磨礪,計算機科學(xué)大師喬恩·本特利以其獨有的洞察力和創(chuàng)造力,從磨礪程序員的實際問題中凝結(jié)出一篇篇編程“珠璣”,成為世界計算機界名刊《ACM通訊》歷史上*受歡迎的專欄,*終結(jié)集為兩部計算機科學(xué)經(jīng)典名著,影響和激勵著一代又一代程序員和計算機科學(xué)工作者。本書為第一卷,主要討論計算機科學(xué)中*本質(zhì)的問題:如何正確選擇和高效地實現(xiàn)算法。
在書中,作者選取許多具有典型意義的復(fù)雜編程和算法問題,生動描繪了歷史上大師們在探索解決方案中發(fā)生的軼事、走過的彎路和不斷精益求精的歷程,引導(dǎo)讀者像真正的程序員和軟件工程師那樣富于創(chuàng)新性地思考,并透徹闡述和總結(jié)了許多獨特而精妙的設(shè)計原則、思考和解決問題的方法以及實用程序設(shè)計技巧。解決方案的代碼均以C/C++語言編寫,不僅有趣,而且有很大的實戰(zhàn)示范意義。每章后所附習(xí)題極具挑戰(zhàn)性和啟發(fā)性,書末給出了簡潔的解答。
作者簡介
喬恩.本特利(Jon Bentley) 世界著名計算機科學(xué)家,被譽為影響算法發(fā)展的十位大師之一。他先后任職于卡內(nèi)基-梅隆大學(xué)(1976—1982)、貝爾實驗室(1982—2001)和Avaya實驗室(2001年至今)。在卡內(nèi)基-梅隆大學(xué)擔(dān)任教授期間,他培養(yǎng)了包括Tcl語言設(shè)計者John Ousterhout、Java語言設(shè)計者James Gosling、《算法導(dǎo)論》作者之一Charles Leiserson在內(nèi)的許多計算機科學(xué)大家。2004年榮獲Dr. Dobb's程序設(shè)計卓越獎。
譯者簡介
黃倩 河海大學(xué)計算機科學(xué)與技術(shù)系主任,曾任聯(lián)發(fā)博動科技(北京)有限公司技術(shù)副理,主要從事視頻處理、機器學(xué)習(xí)等方面的研究工作,兼任中國人工智能學(xué)會深度學(xué)習(xí)專委會委員、中國計算機學(xué)會多媒體技術(shù)專委會委員、中國圖象圖形學(xué)學(xué)會多媒體專委會委員等。
錢麗艷 北京大學(xué)信息科學(xué)技術(shù)學(xué)院基礎(chǔ)實驗教學(xué)研究所軟件實驗室主任、高級工程師,畢業(yè)于國防科技大學(xué),目前主要從事數(shù)值計算、程序設(shè)計方面的研究工作。
審校人簡介
劉田 北京大學(xué)信息科學(xué)技術(shù)學(xué)院計算機系軟件研究所副教授,畢業(yè)于中國科學(xué)技術(shù)大學(xué),目前主要從事離散數(shù)學(xué)、計算機理論方面的教學(xué)和研究工作,翻譯出版了
第 一部分 基礎(chǔ)
第 1章 開 篇 3
1.1 一次友好的對話 3
1.2 準(zhǔn)確的問題描述 4
1.3 程序設(shè)計 4
1.4 實現(xiàn)概要 6
1.5 原理 7
1.6 習(xí)題 8
1.7 深入閱讀 9
第 2章 啊哈!算法 11
2.1 三個問題 11
2.2 無處不在的二分搜索 12
2.3 基本操作的威力 14
2.4 排序 16
2.5 原理 17
2.6 習(xí)題 18
2.7 深入閱讀 20
2.8 變位詞程序的實現(xiàn)(邊欄) 20
第3章 數(shù)據(jù)決定程序結(jié)構(gòu) 23
3.1 一個調(diào)查程序 23
3.2 格式信函編程 26
3.3 一組示例 28
3.4 結(jié)構(gòu)化數(shù)據(jù) 29
3.5 用于特殊數(shù)據(jù)的強大工具 30
3.6 原理 32
3.7 習(xí)題 33
3.8 深入閱讀 34
第4章 編寫正確的程序 37
4.1 二分搜索的挑戰(zhàn) 37
4.2 編寫程序 38
4.3 理解程序 40
4.4 原理 43
4.5 程序驗證的角色 44
4.6 習(xí)題 45
4.7 深入閱讀 48
第5章 編程小事 49
5.1 從偽代碼到C程序 49
5.2 測試工具 51
5.3 斷言的藝術(shù) 53
5.4 自動測試 55
5.5 計時 56
5.6 完整的程序 58
5.7 原理 59
5.8 習(xí)題 59
5.9 深入閱讀 61
5.10 調(diào)試(邊欄) 61
第二部分 性能
第6章 程序性能分析 65
6.1 實例研究 65
6.2 設(shè)計層面 67
6.3 原理 69
6.4 習(xí)題 69
6.5 深入閱讀 70
第7章 粗略估算 71
7.1 基本技巧 72
7.2 性能估計 74
7.3 安全系數(shù) 76
7.4 Little定律 78
7.5 原理 79
7.6 習(xí)題 79
7.7 深入閱讀 80
7.8 日常生活中的速算(邊欄) 81
第8章 算法設(shè)計技術(shù) 83
8.1 問題及簡單算法 83
8.2 兩個平方算法 84
8.3 分治算法 86
8.4 掃描算法 87
8.5 實際運行時間 88
8.6 原理 90
8.7 習(xí)題 91
8.8 深入閱讀 92
第9章 代碼調(diào)優(yōu) 95
9.1 典型的故事 95
9.2 急救方案集錦 96
9.3 大手術(shù)——二分搜索 101
9.4 原理 105
9.5 習(xí)題 106
9.6 深入閱讀 108
第 10章 節(jié)省空間 109
10.1 關(guān)鍵在于簡單 109
10.2 示例問題 110
10.3 數(shù)據(jù)空間技術(shù) 113
10.4 代碼空間技術(shù) 116
10.5 原理 118
10.6 習(xí)題 119
10.7 深入閱讀 120
10.8 巨大的節(jié)省(邊欄) 121
第三部分 應(yīng)用
第 11章 排 序 125
11.1 插入排序 125
11.2 一種簡單的快速排序 127
11.3 更好的幾種快速排序 130
11.4 原理 133
11.5 習(xí)題 133
11.6 深入閱讀 135
第 12章 取樣問題 137
12.1 問題 137
12.2 一種解決方案 138
12.3 設(shè)計空間 139
12.4 原理 142
12.5 習(xí)題 143
12.6 深入閱讀 144
第 13章 搜 索 145
13.1 接口 145
13.2 線性結(jié)構(gòu) 147
13.3 二分搜索樹 151
13.4 用于整數(shù)的結(jié)構(gòu) 153
13.5 原理 155
13.6 習(xí)題 156
13.7 深入閱讀 157
13.8 一個實際搜索問題(邊欄) 157
第 14章 堆 161
14.1 數(shù)據(jù)結(jié)構(gòu) 161
14.2 兩個關(guān)鍵函數(shù) 163
14.3 優(yōu)先級隊列 166
14.4 一種排序算法 169
14.5 原理 171
14.6 習(xí)題 172
14.7 深入閱讀 174
第 15章 字符串 175
15.1 單詞 175
15.2 短語 179
15.3 生成文本 182
15.4 原理 187
15.5 習(xí)題 188
15.6 深入閱讀 189
第 1版跋 191
第 2版跋 195
附錄A 算法分類 197
附錄B 估算測試 203
附錄C 時空開銷模型 205
附錄D 代碼調(diào)優(yōu)法則 211
附錄E 用于搜索的C++類 217
部分習(xí)題提示 223
部分習(xí)題答案 229
索引 259