這本演算法書寫了七年
小編語
現如今,出版一本書已經不是什麼特別稀奇的事兒了。編程世界也一樣,新書層出不窮,多得讓人眼花繚亂。最近圖靈出版的新書,有一本書讓我特別感動,不僅是因為這本書內容本身好,更是因為作者樂意七年時間沉浸於一件事兒中仔細打磨,這本書就是《演算法新解》。之前很早就聽策劃編輯說她手下有本演算法書很給力,作者寫了七年之久,而且是先發布英文版,再寫中文版,當時敬佩之心油然而生。
前段時間,作者劉新宇拜訪圖靈,有幸見面並聊了一會兒。算起來他已經是一位老程序員了,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天讓你變書法家
※這本書能幫我圓了「遊戲編劇」的夢
※這本書值得你讀一讀
※為啥千年來人們對《魯班書》望而生畏?您看看這本書第一句是啥!