如何系統地學習演算法?
點選上方 藍字 關注我們
下面開始今天的學習~
提到演算法學習,不得不給大家推薦一本實用的書籍:
《演算法導論》,或稱 CLRS,是一本可以和 《編譯原理》,《CS:APP》等相提並論的超經典書籍。
豆瓣上對於此書的介紹如下:
在有關演算法的書中,有一些敘述非常嚴謹,但不夠全面;另一些涉及了大量的題材,但又缺乏嚴謹性。 本書將嚴謹性和全面性融為一體,深入討論各類演算法,並著力使這些演算法的設計和分析能為各個層次的讀者接受。 全書各章自成體系,可以作為獨立的學習單元;演算法以英語和虛擬碼的形式描述,具備初步程式設計經驗的人就能看懂;說明和解釋力求淺顯易懂,不失深度和數學嚴謹性。全書選材經典、內容豐富、結構合理、邏輯清晰,對本科生的資料結構課程和研究生的演算法課程都是非常實用的教材,在IT專業人員的職業生涯中,本書也是一本案頭必備的參考書或工程實踐手冊。
《演算法導論》是一本公認的學習演算法的好書,其次,它還是一本教材,對應的是 MIT 的 Introduction to Algorithms (SMA 5503) 課程。
演算法導論怎麼學
如果英文水平不是非常好,建議大家還是先從中文版開始比較合適。
個人認為專業書籍在你能看出來“這翻譯的是啥破玩意”之前都可以看中文版。——某網友
關於演算法描述,在書中所有的演算法描述都是虛擬碼形式,我認為不用太糾結如何程式設計實現,畢竟這個是 "演算法" 教學,不是程式設計教學,無需過於追求在演算法課上學習程式設計。
演算法本就是很純粹的數學物件,它的設計思想完全依託於背後的數學結構,它運作的機制以及它的美,也都來自它的數學,如果對應書上的虛擬碼來僵化自己寫程式的思路的話,就會讓演算法的數學之美淪為一段機械程式碼。辛苦地把自己的思維變成機器,即使讀懂了這些程式碼,也並不能直接帶來對演算法本身的領悟。
就像一個人懂得了打牌的遊戲規則,但並不意味著他就會打牌了,因為他可能依舊不通曉牌理。對演算法的學習也要從問題本身的數學結構入手,理解解決此種結構問題的演算法的設計思想,掌握分析具有各種結構特徵的演算法的數學工具,學習怎樣發現問題的結構並從中推出問題的下界(lower bound),這些才是學習演算法的根本。
學習順序
關於學習順序,本書是一本教材,美國的教材和中國的教材差異較大,《演算法導論》對於很多細節寫得非常詳細,《演算法導論》還為我們建立了資料結構與演算法之間的聯絡。書中的前篇,除了一些基礎的演算法,都在由淺入深地介紹資料結構的知識,這些結構擁有各自有趣的特性,當然如果你是一個沒有資料結構基礎的萌新的話,建議先看一下前面幾個章節,加深對於資料結構的理解之後,再對後面各個章節進行興趣驅動閱讀。(比如我個人就不會直接從排序開始看)
此外,一些關於《演算法導論》的書評也值得關注和注意:
我認為這本書最大的缺點,也是它最大的優點,就是內容非常充實,需要相當多的時間來仔細閱讀。作為入門書,這本書陪伴了我很多年,很多章節都被反覆閱讀了。國內大學的本科生,迫於課業、實習、瑣事和環境的壓力,能做到這一件事的人並不多。然而我認為這是在本科階段最重要的事情之一,沒有演算法就沒有整個電腦科學。《演算法導論》的知識略顯死板,給人謹慎、細緻的感覺,行文和脈絡遠不如 Kleinberg 和 Dasgupta 那種大快朵頤的感覺,然而嚴謹的思路、詳細的證明、全面詳實的內容,無疑奠定了它在人們心中的地位。這本書的一大特點就是嚴謹,我個人的經驗是一定要熟練掌握裡面的所有演算法和資料結構,它們都是電腦科學的基礎,不但要掌握演算法和資料結構的思路,還要懂得證明演算法的複雜度。不要覺得裡面的證明過於“理論化”在實際當中可能用不上,等你實際編碼的時候就會發現這裡面的知識讓你學會像計算機一樣思考,在解決問題時有一個最基本的思路(比如如何根據 QQ 號碼找到這個人的資訊?有了資料結構的基礎你起碼知道可以用雜湊表實現),也懂得分析某種演算法會耗費多少時間和空間,進而判定它是否是可接受的。電腦科學涵蓋廣泛,但演算法是所有行家公認的基礎。
演算法課程推薦
除了《演算法導論》這本書以外,還有一些線上的課程也是非常值得推薦的,例如在 Coursera 上面:普林斯頓大學的 Algorithms, 以及 UCSD 的 Data Structures and Algorithms Specialization。
總之,《演算法導論》對於演算法(而不是程式設計能力)的學習上非常有幫助,且通過一個合適的學習路徑可以讓自己的演算法學習之路變得更加輕鬆, 力扣(LeetCode) 平臺可以讓演算法活學活用,讓學到的演算法不僅僅是停留在書上的一些虛擬碼上,還可以瞭然於心,這樣無論是在面試還是在和別人吹牛的時候都可以獲得很好的個人形象的提升。
本文作者:Nova
編輯&版式:霍霍
宣告:本文歸 “力扣” 版權所有,如需轉載請聯絡。
推薦閱讀