程序員書庫(ID:OpenSourceTop) 編譯
鏈接:https://www.eyrie.org/~eagle/reviews/books/1-62779-037-3.html


包括我曾經推薦過的那些書在內,這是迄今爲止我最喜歡的書 —— 《算法之美》


這本書告訴你算法不一樣的一面



計算機科學研究領域的基礎之一是對算法的研究:我們如何利用計算機程序有效地解決問題?這在很大程度上是屬於數學領域的問題,但它往往不是爲了找出最理想或理論上的解決方案,而是關於如何最有效地利用有限的資源,得出一個適當的(可能並不完美的)答案。

其中許多問題要麼是日常的問題,要麼是與之密切相關,畢竟,計算機科學就是利用計算機來解決實際問題。而這本書提出的問題是“我們能逆轉嗎?我們能否通過計算機科學的方法中來幫助我們做出日常決策?

這本書的第十一章有許多有趣的內容,但也有一個有趣的主題:人類早已擅長這一點。許多章節都是從問題的算法的分析或者數學分析開始的,然後深入討論我們如何利用這些得出來的結果做出最佳決策,最後再對人類的實際行爲決定作出研究。考慮到生活環境等因素的限制,人類已經在應用我們所提出的最佳算法的特殊版本了。

這可能和本書的目標有所相悖,但並不會破壞對於一般性問題的討論,計算機科學是如何解決這些問題的,以及我們對這些問題的數學和技術形式的瞭解。這裏的自助工具比我預想的要少一些,但是仍然有很多值得思考的東西。

值得一提的是,考慮這二者的一致性不僅是因爲人類已經十分擅長於此,更因爲我們的算法設計本就來源於人類的直覺。

在這類書中,章節列表是最重要的一部分,這裏討論的算法領域包括最優停止、探索/利用決策(當你找到最優解的時候,以及何時候尋找更好的方案)、排序、緩存、調度、貝葉斯規則(通常是預測)、構建模型時過擬合、鬆弛(解決比實際問題更簡單的問題)、隨機算法、網絡算法集合,最後是博弈論。

每一個算法都有一些有用的見解和發人深省的討論,這些看似很驚人的理論往往可以很好的映射到日常生活中,書的結尾討論了“計算能力的好處”:鼓勵減少對你自己和你交往的人所需的計算和複雜性的懲罰。

如果你有計算機科學背景(就像我一樣),對其中的許多概念都很熟悉,你可能會對書中所普及的知識有所懷疑,不過還是請你耐心往下讀,書中的類比沒有你想的那麼牽強,作者在運用這些原則的時候十分謹慎也很明智。

這本書還不乏合理性:涉及到我知道或反覆思考過的主題的章節很少有或沒有明顯的錯誤,而且能講出有用和重要的事情。例如關於調度這章,毫無疑問,本章是關於時間管理,超過一半以上的時間管理文獻直接跳到時間管理的核心問題:如果你要做一個清單上的所有事情,你做這些事情的順序並不重要,最困難的是決定不做哪些事情而不是做這些事情的順序。

書中最令我喜歡的是關於貝葉斯法則這一章節,這一章的大部分內容都是關於貝葉斯先驗的,一個人對過去事件的瞭解是未來概率分析的一個重要部分。然後作者討論了著名的棉花糖實驗,在實驗中,給孩子們一個棉花糖,並告訴他們如果他們不吃,直到研究員回來,他們將得到兩個棉花糖。不吃棉花糖的孩子(在心理文獻中,延遲的滿足感)在數年後有更好的生活。

多年來,這個實驗一直被各種引用和宣傳,宣傳的內容是如何用眼前的快樂換取未來的收穫,從而擁有成功的生活,以及生活中的失敗是如何因爲無法延遲滿足而導致的。當然,更多的邪惡分析將這種能力與種族聯繫在一起,其結果可想而知是種族歧視。這個實驗一直令我十分生氣

《算法之美》是我讀過的唯一一本提到棉花糖實驗,然後運用了最能令我信服的分析方法的書,這不是一個關於兒童天賦的實驗,這是一個關於他們的貝葉斯先驗的實驗。什麼時候吃棉花糖比等待獎勵更有意義?當他們過去的經驗告訴他們,成年人是不可靠的,不可信任的,會在你意料不到的情況下撒謊,而且,更妙的是,作者們用我以前從未聽說過的後續研究來支持這種分析,並觀察到一些孩子會等待一段時間,然後“放棄”,如果他們下意識地使用具有較差先驗的貝葉斯模型,這就完全合情合理了。

這是一本好書,不過它可能在某些章節的講述有點太過了(數學上最優停止對於日常生活的適用性比我認爲作者想要表現的更加偶然和牽強)如果你學習過算法,你會對其中的一些很熟悉。但是書中的內容清晰易懂,對問題的討論貫穿全書。可能你閱讀到某部分讓你覺得“我已經知道了所有的這些內容”,在接下來幾頁你就會遇到一個你從未見過的概念。

有時作者會做一些我從沒想到但是回想起來正確的聯繫,比如將網絡協議中的指數退避和司法系統中的選擇懲罰聯繫起來。還有意識到我們的現代通信世界並不是一直聯繫的,它是不斷緩衝的,我們中的許多人正深受緩衝膨脹這一獨特現象的苦惱。

我不認爲你必須是計算機專業的學生,或者對數學很瞭解才能讀這本書。如果你想深入瞭解的話,最後的筆記中有很多數學細節,但在文中的描述上都十分清晰易懂,至少就我看到的是這樣,作爲一個主修計算機科學的我,可以明確的告訴你即使你已經研究算法多年了,本書依然有很多東西可以讓你學習

我越讀這本書,就越喜歡它。如果你也喜歡讀這類對生活示例進行分析的書,絕對推薦。

相关文章