啊哈!算法神探:一部谷歌首席工程師寫的CS小說

紀磊,李嘉浩

買這商品的人也買了...

商品描述

《啊哈!算法揭秘》圍繞程序設計典型算法,精心編織了一個場景,讓讀者通過本書學會優先搜索、深度優先搜索、迭代加深、並行算法、二分搜索等算法背後的原理,字符串、數組、棧和隊列等基本電腦科學概念,學習如何修改搜索算法以適應不同的數據結構、如何在特定情況下選擇的算法,以及何時應該使用基於常識的啟發式算法,以加深對程序世界的理解。 本書的每一章都會伴隨情節引入一個新的算法概念,並在結尾處回顧總結本章內出現的專業知識。

目錄大綱

第一章 搜索問題 1

警局檔案室里的幾百份捲宗莫名失蹤,警長求助Frank,一位幾年前被自己親自辭退的前警官。

警用算法導論:搜索問題 6

第二章 窮舉搜索尋線人 7

搜索第一站:Frank尋找“玻璃箱”Billy。作為一個靠分享信息過活的人,Billy這次竟然不願透露信息。

警用算法導論:窮舉搜索 13

第三章 罪犯農場里的數組和索引 15

搜索第二站:Frank在Crannock農場偶遇Notation警官。雖然飽受Crannock夫婦的呵斥,Frank還是幸運地在數組車上找到一根珍貴的線頭。

警用算法導論:數組 22

第四章 字符串及隱藏的信息 23

Frank的回憶:初入警局時學習辨識Crannock農場的指示牌信息,這個指示牌被用來傳播各種加了密的非法活動消息。

警用算法導論:字符串 26

第五章 對一艘走私船的二分搜索 27

搜索第三站:Frank和Notation來到Usb港,根據船隻的到港時間快速鎖定走私船Retry Loop號。

警用算法導論:二分搜索Ⅰ 33

第六章 二分搜索尋線索 37

Frank和Notation假裝食品監察員闖入Retry Loop號,快速翻看造假日誌尋找蛛絲馬跡。

警用算法導論:二分搜索Ⅱ 43

第七章 調整算法,大膽逃離 45

他們被船上惡棍們拖上甲板,惡棍們的資歷是如此淺,以至於什麽信息都套不出來。

警用算法導論:改編你的二分搜索法 54

第八章 Socks:一個突如其來的插曲 55

峰迴路轉,素不相識的小巫師Socks來營救,營救武器竟然是一桶桶的腌鰻魚。

第九章 倒退一步,繼續搜索 63

搜索第四站:Mudwall港口,與村民們再三確認,最近沒有船到港,一無所獲地離開。

警用算法導論:倒退一步 67

第十章 用廣度優先搜索去開鎖 69

搜索第五站:Frayed Cable島,這里有一座廢棄的監獄,Socks用咒語打開了監獄大門的鎖。

警用算法導論:廣度優先搜索 76

第十一章 廢棄監獄中的深度優先搜索 81

這座廢棄的監獄像迷宮一樣,不過在Frank的帶領下,他們真的在這里找到了那些失蹤的捲宗!然而……

警用算法導論:深度優先搜索 89

第十二章 餐廳中的棧和隊列 91

Frank的回憶:在警察學院的最初兩個月,Frank在餐廳打工,在一次偶然聊天中他意識到了數據結構的重要性。

警用算法導論:棧和隊列Ⅰ 97

第十三章 用棧和隊列搜索 101

廢棄監獄里房間的門突然關閉,捲宗被燃燒,重要線索被毀,他們落荒而逃。

警用算法導論:棧和隊列Ⅱ 106

第十四章 分頭行動——並行搜索 109

返回Usb港的途中,Frank決定上岸後將Notation和Socks支開,因為他感覺自己無法相信任何人。

警用算法導論:並行算法 115

第十五章 迭代加深可以救你的命 117

Mavis的回憶:在自己還是學徒的一次出海中,雖然地圖丟失了,他們仍然用一種看似笨拙的方法在茫茫大海中找到了補給站。

警用算法導論:迭代加深 125

第十六章 逆向索引:縮小搜索範圍 127

搜索第六站:上岸後Frank拿著在Crannock農場找到的線頭去請教披風專家Cloaksworth 先生,確認這是一件被施了咒語的警察披風上的線頭。

警用算法導論:逆向索引 132

第十七章 二叉搜索樹陷阱 135

謝過Cloaksworth先生後Frank走在街上,發現自己被探子跟蹤了。他轉而去追探子,被引入了下水道內建造的高高的二叉搜索梯。

警用算法導論:二叉搜索樹Ⅰ 142

第十八章 建造二叉搜索梯 145

Frank一層層爬下梯子,然而爬到最後一層時他受傷了。探子放鐵蛇來圍攻,Frank艱難爬回地面。

警用算法導論:二叉搜索樹Ⅱ 150

第十九章 疑犯的二叉搜索樹 151

搜索第七站:調查調職記錄,Frank讓Socks生成巨大的閃閃發光的魔法樹,但是沒能找到任何可疑之處。

警用算法導論:二叉搜索樹Ⅲ 160

第二十章 將疑犯加到搜索樹中 163

Frank決定帶著魔法樹去見警長,不過途中他們停在了警局記錄處,他們需要向魔法樹中增加一些節點。

警用算法導論:二叉搜索樹Ⅳ 169

第二十一章 二叉搜索樹的屬性 171

在增加節點的過程中,Socks犯了“小”錯誤,這引起了Frank的抱怨、咒罵和懷疑。

警用算法導論:二叉搜索樹Ⅴ 173

第二十二章 公文字典樹 175

途中他們又來到警局檔案室,Frank得以在事故現場偵察,在這里他找到了新的線索。

警用算法導論:trie樹 179

第二十三章 最佳優先搜索:偵探最值得信賴的工具 183

Frank與警長交談,發現事態比想象中的更緊迫而嚴重:攻擊城堡的計劃、強大的魔法面具、危險的邪惡巫師聯盟……

警用算法導論:最佳優先搜索 190

第二十四章 用優先隊列進行調查 193

Notation受到警長嚴厲批評,被停職,因為她一直在擅自調查不屬於自己的案件。

警用算法導論:優先隊列 199

第二十五章 用優先隊列來解鎖 201

Frank想回到自己的辦公室,卻發現再次被跟蹤了,他甩掉探子,巧妙地解開安全屋的密碼,躲進了安全屋。

警用算法導論:數據結構和搜索 205

第二十六章 啟發式搜索 207

搜索第八站:安全屋裡的靜心反思。Frank反復研究著找到的所有線索,忽然他開始懷疑之前的所有推斷。可靠的線索用盡了,模糊的線索也沒有了……

警用算法導論:啟發式搜索 210

第二十七章 警察學院中的“堆” 213

Loop教授的回憶:警察學院基於教齡分配辦公室,95歲的Loop教授有長達70年的教齡,終於爭奪到了本應屬於自己的辦公室。

警用算法導論:堆 219

第二十八章 搜索難題 223

搜索第九站:Frank向Loop教授請教咒語知識。巫術犯罪學是一個危險的領域,而Loop教授卻一直能夠幸存下來。在這里Frank終於釐清了線索。

警用算法導論:期末考試復習課 229

第二十九章 搜索終點站 231

Frank與Notation來到警局的監獄,一舉抓獲戴著魔法面具、試圖解救自己首領的小巫師,沒錯,他就是一路同行的Socks。

結  語 239