
首先說一下這本書的大緻情況。本書是Google首席工程師Jeremy Kubica的作品(當然,這個人我也沒聽說過),翻譯者是啊哈磊和李嘉浩。對于啊哈磊這個人,IT行業的人或許聽說過,他寫過一本書叫《啊哈!算法》,讀者挺多的。《算法神探》這本書一共二百多頁,29個章節,幾乎每章都涉及到一種算法或資料結構。在跌宕起伏的故事情節中,我們可以領略到算法之美。
本書的故事情節大概是這樣的:一個王國的警局總部遭遇了一起盜竊案,警長請一位被解雇的前探員Frank Runtime來将這個案子調查清楚;之是以要請一位被解雇的探員,是因為他是一位老練的私家偵探,并且非常擅長搜尋;Frank Runtime利用他的搜尋算法搜查走私的船、跟蹤間諜、逃離監獄、開鎖,并在最後揭發了一樁暗藏在深處的陰謀。這本書的每一章都是一個劇情片段,同時會引入一個新的算法概念。為了加深大家對算法基礎知識的了解,在每章的結尾處都會回顧并較長的描述本章内出現的算法知識。
按照章節順序,在本書中出現的算法或資料結構包括:窮舉搜尋、數組、字元串、二分搜尋、廣度優先搜尋、深度優先搜尋、棧、隊列、并行算法、疊代加深、逆向索引、二叉搜尋樹、trie樹、最佳優先搜尋、優先隊列、啟發式搜尋、堆。下面是對這些概念的簡單解釋:
窮舉搜尋:在整個搜尋空間内嘗試每一種可能性。 數組:一個數組就像一排箱子一樣,每個箱子可以存儲一條資訊。 字元串:由一系列字元組成,這些字元可以是字母、數字、符号或空格。 二分搜尋:其工作原理是不斷地将搜尋空間分成兩半,并且把搜尋空間限制在其中的一半中。 廣度優先搜尋:是一個按順序依次嘗試可能的搜尋選項的算法,它每次都會選擇嘗試首先發現的但還沒有嘗試過的選項。 深度優先搜尋:優先考慮最近新遇到的搜尋狀态,它會沿着一條路往下走,直到遇到目标狀态,或者是一條死路。 棧:是一個後入先出的資料結構。 隊列:是一個先入先出的資料結構。 并行算法:将一個問題分成數個小塊,并同時在這些小塊上執行計算,最後再将結果組合起來。 疊代加深:是深度優先搜尋的一種改版,它限制了每一次搜尋的深度,在第k輪搜尋的時候,這個算法會執行一次深度限制為k的深度優先搜尋。 逆向索引:它和書的索引類似,對于每一個值,逆向索引可以告訴你這個值在資料中的哪些地方出現過。 二叉搜尋樹:它是一種資料結構,它存儲資訊的方式和二叉搜尋中使用資訊的方式類似,樹中的每一個節點存放一個值,并且每個節點最多有兩個子節點,左子節點中存放的值都比目前節點中的值小,右子節點中存放的值都比目前節點中的值大。 trie樹:是基于樹的資料結構,使用者可以很友善地通過某個字元串的字首來搜尋到目标字元串。 最佳優先搜尋:是基于某種估值分數或者評價函數來選擇接下來探索哪個狀态的算法。 優先隊列:它讓你能插入資料,然後按特定的順序删除資料。 啟發式搜尋:依據經驗來幫助算法快速達到目标。 堆:是基于二叉搜尋樹的資料結構,它的每個節點與其子節點之間需要時刻維持有序關系;具體而言,對于最大堆,樹中的任意一個節點的值都要大于(或等于)其下面的所有節點。
看完了這本書,我的體會有這幾個:
第一,一本好的書就是要讓其内容具備趣味性,讓讀者能夠有繼續讀下去直到讀完(甚至讀好幾遍)的理由。
第二,算法不光隻是存在于計算機科學的研究和實踐中,在我們的生活中,算法也是無處不在的。大到做一個人生中的重要決定,小到買菜購物,背後的指導思想都是算法。
第三,解決一個問題的方法往往不止一種,我們要根據實際情況選擇合适的方法,但這個方法可能不是最優的。
《算法神探》,一本具備趣味性和知識性的計算機科普讀物,推薦給大家閱讀!
歡迎大家掃碼加入我的小蜜圈: