系列博文主要目的:html
收集《編程珠璣》和《編程珠璣(續)》(如下簡稱《續》)上的算法和思想,幷包括了一些本身的思考和對相關問題的引伸,以備複習和查用。node
內容提要:算法
主要是算法收集,結合了《程序設計實踐》 (Practise of Programming)、《編程精粹:編寫高質量C語言代碼》(Writing solid code)和《算法導論》的部分相關內容,以及本身的思考,不管你是否看過原書,都可以幫助你快速理解以致於可以獨立完成這些算法。我相信本身寫的解釋比原書詳細而易於理解,而且根據個人經驗,對不少問題進行了擴展,這也是這個系列命名爲「珠璣之櫝」的緣由。固然,「買櫝還珠」是不可取的,這個系列雖然收錄了絕大部分有價值的內容,但部分和話題相關但和算法關係不大的有趣內容限於本人時間有限,只好舍掉。建議時間富足的讀者儘可能閱讀原書,並把這個系列的博文當作參考資料。編程
出自於《編程珠璣》和《續》原書的算法題和習題有標示。數組
本系列博文已經寫完,預計1~3天發佈一篇,目前(2013.7.8)已發完。數據結構
索引連接:函數
位向量/位圖的定義和應用debug
隨機數函數取樣與機率code
字符串和數組算法:左移、哈希表、最長重複子序列的後綴數組解法、最大連續子序列
原書有但未收錄的內容介紹:
1.基礎的數據結構
二分查找樹
2.較少使用的數據結構
箱
3.基本的排序
插入排序、希爾排序、快速排序
4.堆和優先級隊列
我的更傾向於使用《算法導論》上介紹的版本
5.馬爾科夫鏈文本生成器
利用馬爾科夫鏈的性質,通過文本訓練,可以產生一段天然的隨機文本的程序。
與《程序設計實踐》相比,因爲使用了更精巧的數據結構,佔用空間較少,但也更難理解。
6.以二分查找(第9章)和質數查找(《續》第1章)爲例的代碼調優
7.位排序算法
相似strcmp(),可查閱習題11.5
8.拓撲排序
第2章,僞代碼:
initialize a queue to empty
for each node i
if pre count of i is 0
insert i to queue
while queue is not empty
delete t from the front of queue
print t
for each successor s of t
decrement pred count of s
if the count is 0
insert s to queue
《算導》上的拓撲排序比這個略難理解一些,由於它爲了說明,引入告終束時間的概念。
9.關聯數組
介紹的是Awk語言的特性,現在的C++裏的map容器還有像Python裏的字典有相似的做用。
10.以牛頓迭代法爲表明的數值分析(《續》第14章)