當前位置:
首頁 > 知識 > 這本演算法書寫了七年

這本演算法書寫了七年

小編語


現如今,出版一本書已經不是什麼特別稀奇的事兒了。編程世界也一樣,新書層出不窮,多得讓人眼花繚亂。最近圖靈出版的新書,有一本書讓我特別感動,不僅是因為這本書內容本身好,更是因為作者樂意七年時間沉浸於一件事兒中仔細打磨,這本書就是《演算法新解》。之前很早就聽策劃編輯說她手下有本演算法書很給力,作者寫了七年之久,而且是先發布英文版,再寫中文版,當時敬佩之心油然而生。

這本演算法書寫了七年



前段時間,作者劉新宇拜訪圖靈,有幸見面並聊了一會兒。算起來他已經是一位老程序員了,2001年從清華大學自動化系畢業之後就從事軟體研發工作,目前就職於亞馬遜中國倉儲和物流技術團隊。

他關注基本演算法和數據結構,尤其是函數式演算法。平時酷愛閱讀,編程類圖書和數學類圖書是他的心頭好。我加了新宇老師的微信之後,發現他發微信比較少,有必與書相關。比較讓我吃驚的是他的閱讀速度,大概是因為了解得越多吸收得越快吧。


當然,我對新宇老師了解不多,也不懂演算法,接下來關於《演算法新解》和作者的故事,交給專業大咖們講述。


常成博士


4數網主編


「使用和發現演算法是快樂的,這也是我覺得這本書特別美好之處。畢竟人類的最高階段就是認識宇宙,了解生命起源,而更高階段是創造和優雅地解決那些有趣的謎題!」


我幾年前曾經粗略讀過這本書的英文書稿Elementary Algorithms,五六百頁的一本演算法書,是作者多年來在學術界和工業界實踐中不斷思考的結晶。那本英文書稿因為對幾個演算法問題的獨到解讀,成為英文世界中很多人學習演算法的參考資料。這次我拿到新宇的中文版書稿《演算法新解》,感覺內容更加充實豐富,文筆更加流暢,引文更加全面,結構更加緊湊,我也更加不讀完不能釋手。過去有人告訴我又一本中文版演算法書要出版時,我通常的反應都是「又一本?」,並嗤之以鼻。畢竟中文的計算機演算法書質量良莠不齊,而且存在大量照翻英文書的現象,而這本《演算法新解》則是作者多年知識積累下的原創之作。更加難得的是,作者在書後給出了詳細的參考文獻,供讀者進一步學習參考。


從計算機語言知識的角度看,這本書雖然原叫「初等」演算法,但是對讀者的要求並不低,書中大量使用了C/C++、Python 和Haskell 這幾種語言。C/C++ 和Python 作為傳統而又實用的兩種語言,包含了指令語言、面向對象和動態語言等幾種形態,為從業人員和普通大眾所廣泛使用和熟悉。那麼,為什麼要用Haskell 呢?孫中山曾經說過「世界潮流,浩浩蕩蕩,順之則昌,逆之則亡」,計算機語言的進化過程也一樣。計算機語言從最初的「讓機器能理解人的交流工具」,逐漸進化到可以描述人類思考過程的更加抽象、數學上更嚴謹,也更加強大的函數式編程語言,而Haskell 就是函數式編程語言的代表。如果要讀懂這本書的最深刻精髓,你需要一點Haskell 知識;如果你之前沒有學過,也讓這本書成為你學習一門函數式編程語言的動力之一吧!


從演算法理論的角度看,這本書深入淺出。作者先花大量篇幅講述最重要的幾種數據結構和相關的處理方法,然後用大量經典而又新穎的問題來講述計算機演算法的核心問題:如何排序和搜索。這本書在前半部分介紹基本的數據結構時沒有落入俗套,而是從樹、堆講起,最後介紹「並不簡單」的隊列,讓人不禁想起張築生先生先講積分、後講微分的經典名著《數學分析新講》。我很喜歡作者介紹排序演算法時對「冒泡排序」的處理:本書並不花費篇幅談論如此低效的演算法,讀者可到維基百科自行花5分鐘理解。相反,作者用了100 多頁的篇幅,通過經典而又有趣的謎題詳細講解了各種搜索演算法。更難得的是,作者大量使用函數式編程語言來做範例,展示了這類語言的強大之處,這在很多中文演算法書中是看不到的。


從思考解決各種有趣問題的角度看,這本書適合任何知識背景和層次的讀者「享用」。演算法不僅僅可以用來解決現實世界中的種種實際問題,比如通過關鍵詞尋找網上最有用的信息,尋找最短的旅遊路線來遊歷所有的景點,再比如無線通信中的信道編碼和解碼;很多美妙的演算法源於人類對一些挑戰自身智力的謎題的思考,比如經典的華容道問題,尋找數獨的解法,再比如用程序戰勝九段圍棋高手等。書中的這些謎題深刻卻不枯燥,作者還給出了很多幽默的插圖,它適合也值得任何學術背景的人花時間閱讀和思考。這讓我看出作者寫這本書不但花費了很多心血,而且收穫了很多歡樂;使用和發現演算法是快樂的,這也是我覺得這本書特別美好之處。畢竟人類的最高階段就是認識宇宙,了解生命起源,而更高階段是創造和優雅地解決那些有趣的謎題!


無論作為一個需要使用各種演算法的從業人員,還是一個喜歡不停思考有趣問題的人,我都覺得新宇的這本《演算法新解》是一本難得的好書。如果可以,我希望能夠立刻把全書上傳到大腦之中。

姚冬


YY 直播架構師


「《演算法新解》的一大特色就是提供了多種編程語言的演算法實現代碼,並且充分利用了各種語言特性。某些演算法用函數式編程語言實現會特別簡潔,比如用Haskell 實現的快速排序只有幾行代碼。」


我和劉新宇認識快10 年了。2007 年的時候我在諾基亞工作,和他所在的公司有技術項目合作,每隔幾周都要一起開會,所以漸漸混熟了。那時他的職位是項目經理,雖然做著管理的工作,但是我感覺他的技術水平比大多數工程師都要好。


有一次工作上的原因,我和他一起去匈牙利出差,在飛機上我在看小說,而他拿出一本英文數學書看了一路。他說數學和編程是他的興趣愛好,每年他都會嘗試學習一門編程語言,或者了解一個新的數學領域。


不同的人有不同的追求,當我們大多數人為了房子車子,為了升職加薪而加班忙碌時,劉新宇卻把6 年的業餘時間用在了寫作上,而且是寫一本免費的書。這本書最初的版本是用英文寫的,中文版是後來翻譯的。


我在大學學計算機編程的時候,看的是嚴蔚敏老師的《數據結構》,當時書里都是Pascal偽代碼,老實說我沒能堅持看完。


如今,編程語言相比二十多年前極大豐富了,而且產生了很多種編程範式。《演算法新解》的一大特色就是提供了多種編程語言的演算法實現代碼,並且充分利用了各種語言特性。某些演算法用函數式編程語言實現會特別簡潔,比如用Haskell 實現的快速排序只有幾行代碼。


現在,軟體開發行業的分工已經非常細了,有人專門負責編寫演算法提供封裝好的庫,也許絕大多數程序員很少需要自己實現某些演算法。我們學習演算法和數據結構,不一定就要實際去編寫演算法代碼,也可以當作一種了解程序底層運作的方式,而這有助於更好地解決問題和優化程序。


閱讀演算法書是會有點枯燥的,先通過閱讀對演算法原理有個基本的概念,然後讀者可以把它當作手邊的參考書,在實際遇到相關問題時拿出來仔細閱讀,結合實際場景可以有更深刻的理解。

這本書是按照教材的風格編寫的,由淺入深,每個演算法從實際應用場景出發,闡述數學原理,再給出偽代碼,並且提供實際可以運行的實現。最後,作者還給出了供課後思考練習的習題。我希望這本書有機會成為計算機教學中的基礎教材之一。


這本書採用了一種新穎的發布方式,它像一個開源軟體項目一樣,作者像管理源代碼一樣管理書的內容,允許讀者參與其中貢獻思路代碼,幫助修改錯誤,以及在其整個生命周期里持續改進。


在軟體和互聯網高速發展的這些年裡,我們程序員不斷開發功能滿足需求,但我們也應該為純技術保留一份好奇、一份執著,劉新宇多年的堅持著實令我感動。雖然演算法都是冷冰冰的符號公式,但是從書里的文字、插圖和代碼里,我們可以感受到作者的技術情懷。


顧崢博士


LinkedIn高級工程師


演算法是每個計算機專業學生的理論課、基礎課、必修課,也是區分計算機愛好者與專業計算機從業人員的重要課程。現在市面上五花八門的演算法書也很多,但是能把演算法結合實際應用生動講解出來的卻鳳毛麟角。劉新宇的這本《演算法新解》讓人眼前一亮,簡明的文字配上插圖和不同編程語言的實現,讓演算法學習變得輕鬆有趣。並且,書中的例子都特別貼近應用,電子字典、用戶輸入匹配等小應用讓人感覺演算法無處不在。對於每個例子,這本書也會循序漸進給出更加優化的演算法,并力求讓讀者掌握一種解決問題的思路。雖然我在計算專業領域研究開發多年,在讀了劉新宇的《演算法新解》以後仍然感覺受益匪淺。我也希望本書的每一位讀者,無論是剛入門的學生、有多年編程經驗的技術人員,還是從事理論研究的科技人員,都能有所收穫。


宋方睿


谷歌軟體工程師、《Haskell趣學指南》譯者


《演算法新解》七年磨一劍,作者筆耕不輟,幾年來常在TopLanguage郵件列表中放出讓大家校對,在程序書泛濫的這個時代尤顯難能可貴。書中包含大量插圖和公式,又結合C/C++、Haskell、Python、Scheme等多種編程語言實現,命令式、函數式兼顧,準確細緻地描述了大量基本演算法和習題。


陳維揚

小米軟體工程師


從入行第一天起,我們就被告誡「不要重複造輪子」,但是現成的「輪子」總有一天會無法達到要求。硬體提升總也趕不上數據量的增加,產品人員總能提出讓人發瘋的新需求,這時我們只有理解原理,才能改進甚至發明可用的新「輪子」。


請不要忘記我們的好奇心。離開了功利的驅使,純粹地獲取知識會是另一種愉悅的精神體驗。在閱讀這本書時,這種體驗將始終伴隨著你。

這本演算法書寫了七年



作者:劉新宇


定價:99


七年磨一劍,亞馬遜中國高級研發人員重磅力作


函數式演算法與常規演算法對照解讀


偽代碼與多語言實現並存,充分發揮語言特性

涵蓋C/C++、Haskell、Python、Scheme等


理論與實例結合,輕鬆學習演算法與數據結構


內含ACM競賽趣題和傳統趣題,發現演算法的樂趣


本書的一大特色就是提供了多種編程語言的演算法實現代碼,並且充分利用了各種語言特性。


本書共分4部分,同時用函數式和傳統方法介紹主要的基本演算法和數據結構,數據結構部分包括二叉樹、紅黑樹、AVL樹、Trie、Patricia、後綴樹、B樹、二叉堆、二項式堆、斐波那契堆、配對堆、隊列、序列等;基本演算法部分包括各種排序演算法、序列搜索演算法、字元串匹配演算法(KMP等)、深度優先與廣度優先搜索演算法、貪心演算法以及動態規劃。


本書由淺入深,每個演算法從實際應用場景出發,闡述數學原理,再給出偽代碼,並且提供實際可以運行的實現。最後,作者還給出了供課後思考練習的習題。


目錄


常成序


姚冬序


前言

第一部分樹


第1章二叉搜索樹:數據結構中的「hello world」


第2章插入排序的進化


第3章並不複雜的紅黑樹


第4章AVL樹


第5章基數樹:Trie和Patricia


第6章後綴樹


第7章B樹


第二部分 堆


第8章二叉堆

第9章從吃葡萄到世界盃:選擇排序的進化


第10章二項式堆、斐波那契堆和配對堆


第三部分 隊列和序列


第11章並不簡單的隊列


第12章序列:最後一塊磚


第四部分 排序和搜索


第13章分而治之:快速排序和歸併排序閱讀


第14章搜索


附錄 列表


參考文獻

索引


贈書活動


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿 的精彩文章:

看破了一個網路詐騙犯,並向他隨手丟了一個木馬病毒……
面試雜談:面試程序員時都應該考察些什麼?
關於Java面試,你應該準備這些知識點

TAG:程序猿 |

您可能感興趣

領一本《啟功給你講書法》,看個究竟這本書都講了些什麼?
過年別忘了給孩子讀這本書
假如四大名著要去掉一本,你會去掉哪本,這本書排名第一
剁手黨都該看看這本書
這本字帖流傳一百年,領會精髓者,學習書法事半功倍!
她的這本行書字帖,曾經一年暢銷百萬冊
請剪掉這本書!
看了一百年前這本楷書字帖,你就明白為什麼古人的字那麼好看了!
一桌「新年家宴」的完美方案,這本書里都有
雍正編了一本書,結果兒子一上來就廢了,這本書到底寫了什麼?
這本被稱為中華預言的第一奇書,幾乎算準了所有歷史事件
這本書值得一讀再讀
這本書我等了整整四年,《早產兒養育必備指南》中文版上市了
如果書櫃只能保留一本書,我選這本
這本失傳百年的楷書老字帖,寫得太美了!
繪本除了看還可以怎麼玩?這本布書告訴你答案
收下這本練字神器,21天讓你變書法家
這本書能幫我圓了「遊戲編劇」的夢
這本書值得你讀一讀
為啥千年來人們對《魯班書》望而生畏?您看看這本書第一句是啥!