該直接上《演算法導論》 還是先看完 《演算法 第四版》?

剛掌握一個編程語言

正在思考該根據哪一本書學習演算法


先看演算法導論,證明直接跳過,看文字和偽代碼,如果不懂在看另一本。萬一看懂了呢?

我當年就是在皇家理工的分手亭上,以成為程序員而不是搞ACM或者研究演算法的目標,把演算法導論的英文第二版看完的,並不覺得有什麼死的很慘的感覺。


演算法導論真的只是紙老虎,講得巨清楚,演算法每一步都用圖解表示出來,簡直良心。

當然習題就是另一回事情了。。


先不要看這兩本書。因為這樣效率很低。

你應該先死記硬背一些基本演算法:二分查找;插入、冒泡、快速和歸併排序。了解一些常用數據結構如鏈表,二叉樹,排序二叉樹,哈希表。這些信息都可以通過互聯網獲得。

你死記硬背完成後就開始刷題,建議上lintcode,做「容易」難度的題目。

完成之後開始了解動態規劃(一種讓程序有記憶的暴力方法)。

然後再做「中等」難度的題目。

做題過程中實在沒想出解法應該立刻上網找答案,不要浪費時間,想不出來不代表你笨,只是因為你沒掌握工具。然後記下答案,過幾天再做這道題。

大概過去3個月,就可以看書了,從比較薄的那本看起。


你隨便選一個,真的隨便,反正你最後肯定會去看講解生動、代碼細緻、並且有公開課配套的《演算法》。

另外你如果不熟悉 Java,有 C 和 C++ 的版本:

演算法:C語言實現 (豆瓣)

演算法I~IV(C++實現)――基礎、數據結構、排序和搜索(第三版) (豆瓣)

語言不同的問題,《演算法導論》通過偽代碼來規避,而它,直接出了不同語言的版本。真是太勤勉了(笑)。


題主提供的信息是:剛掌握一門編程語言。很多回答包括點贊的人都沒有注意到這一點,都沒有注意到這個前提條件,看這些書都有點早。所以,要考慮到這種無指導、無監督的自學情況

先給結論:先看朱戰立的數據結構。再看最簡單的國內的演算法的本科教材(後面有推薦)。原因下面慢慢給出來。

  1. 學演算法是應該有點數據結構基礎的。演算法一方面具有科學性質,另一方面也具有工程性質。因此,演算法和數據結構的關係密不可分,即演算法的實現需要借用某種具體的數據結構。如果不了解數據結構的話,那麼學演算法的時候,會感覺莫名其妙。
  2. 演算法的處理對象更加抽象,而數據結構具有比較具體的操作對象。演算法教材再怎麼寫,都不如數據結構那麼直觀。數據結構的操作方法具有一個具體的操作對象——數據類型。而演算法的抽象程度比數據結構要高得多,沒有具體的操作對象。所以,對於初學者來說,起步困難。比如,迴文的演算法,是一個經常出現的入門級演算法,但是,如果沒有數據結構中的數組的概念,那麼就會走點彎路。
  3. 所以,有必要了解一下線性表、堆棧、隊列、串、數組、回溯、樹、圖、排序、查找、外部文件的基本操作方法。知乎用戶:如何學習數據結構?數據結構的書,我個人推薦先看點朱戰立的書,講得還算可以,雖然沒有引導學生如何從一個基本的數據結構延伸和擴展到較複雜的數據結構(其實真正的項目開發和科研中,都會先分析前人的工作,即一個較基本的數據結構,然後進行演進,加上若干結構變化而得到的)。
  4. 完了之後,再可以看簡單一點的演算法書,特別是國內出版的一些比較簡單的書。這個簡單,並不是僅僅指知識簡單,而是指明確地給出了問題的思維方法。演算法導論,立意還可以,但是,對於初學者,他是到不了那個層次的。如果沒有導師指點的話,那麼,大多數人都會放棄,即從入門到放棄。我見過國內兩本教材,對於初學者是比較友好的。我們推薦書時,要考慮到這樣一點:無指導無監督情況下的初學者的入門。那些什麼演算法的藝術之類,絕對是不適合大多數的初學者的。
  5. 推薦幾本書試試:http://product.china-pub.com/60282#ml、http://product.china-pub.com/3770673#ml、http://product.china-pub.com/4923841#ml、http://product.china-pub.com/198992#ml、http://product.china-pub.com/4509177#ml、http://product.china-pub.com/4881236#ml。我還看過一本更簡單的一些的。但是,對於入門者來說,是比較適合的。


我倆本都買了 演算法導論沒看完,演算法在二刷。

基礎部分兩本一樣的 。順序可能有點不同。

演算法導論證明部分看著頭大,看著不爽就跳過。偽代碼,不管你用什麼語言,看起來舒服。演算法導論的課後題比演算法的實用 ,精鍊,推薦都做 。筆試遇到過 。

演算法看著更像是演算法導論前半部分,講的都很基礎。還有個好處是是官網有數據讓你跑演算法爽爽。數據分tiny medium large。你要是不用java的話,就要自己寫i/o 。我用的Python,也不難。

有數據的話 就能感受一個好演算法是多麼多麼的快。

演算法的課後題推薦Coursera - Free Online Courses From Top Universities里的,筆試遇到過。


直接看演算法導論,有時間就去把引文全都找來看看,證明實在看不懂也就算了,不過演算法看懂了之後明白其思想再看證明很容易頓悟到。

如果實在沒時間就去看數據結構圖論運籌學之類的中文教材。

我當年在念中學抱著學通了才能去NOI的覺悟啃板磚一樣可以用來砸人的影印版,覺得除了英語偶爾會有些阻礙外並沒有什麼想死的感覺。


演算法導論啃到最後幾章了,打算再花一個多月啃完,每周末啃一兩章演算法問題選編。前半本刷了大部分題目,後半本很少刷題,從7月底到現在的所有周末和假期都貢獻給算導了。

這次最大的收穫是克服了多年的浮躁,踏踏實實花了幾個月時間看一本書,早幾年要有這樣的心態,估計現在看的是taocp了。《算導》都啃過了,《演算法》已經不可怕了,下一步就是它了。我的順序不具參考建議:)

更新:《演算法》已看完,確實寫得很好,大部分演算法在腦子裡都有印象。初學推薦先看這本。


推薦劉汝佳的《演算法競賽入門經典》系列,有三本。


看演算法導論吧,然後你就發現根本看不懂然後就能安心去看演算法了


看完《演算法4》再決定是否需要看《演算法導論》,我覺得一般而言看完《演算法4》差不多就夠了,如果你不是專門搞演算法的話,後續對感興趣的演算法再用《演算法導論》或者其他資料補補。

親測直接看《演算法導論》很打擊人的自信


直接上《演算法導論》會死得很慘的!當然是學《演算法 第四版》了,再配上書作者的mooc學習效果會非常好。鏈接:演算法(一) Algorithms, Part I Coursera

另外,如果你需要長期學習計劃的話,請參考:我的演算法學習之路

--------------------------------------------------------------------------------------------------------------------------------------------

2015年5月12日補充答案:

學習《演算法導論》時,推薦配合上台灣清華大學資訊工程系的mooc《資料結構導論》一起學效果會更好。鏈接:NTHU MOOCs 清華大學磨課師課程


我也是暑假開始學Python,然後就初生牛犢不怕虎的毅然決然走進演算法導論的坑,我是採用的看公開課公開課的方式學的,可能對於一些大神來說,看書會更好,但是對我這個入門小白來說,看公開課無疑是一種非常有效的方式,然後我基本上一天一集差不多看完了網易公開課上的演算法導論課程,中間還記了一些筆記。看完以後,我自己覺得其實對我這種小白來說意義不是特別的大,可能是看視頻的緣故,反正就是自己覺得有些東西糊裡糊塗的,看完就記得一些概念性的東西,一些具體的東西就不記得了,還有一些概念基本就理解不了。我就決定還是放一放吧,先看看中文一些比較入門集的視頻吧。

然後我現在就在B站看數據結構與演算法的公開課,看的是最高播放量的視頻,講的還不錯,主講人還時不時的開個車,每集差不多也就20分鐘左右,我是看這個視頻,然後再自己用Python寫一寫裡面的演算法。我覺得這個看完差不多數據結構和演算法也入門了,準備再擼演算法導論,可能效果會好很多。

分享我的學習經歷,與諸君共勉。


當演算法課TA,邊教邊學


just do it!


推薦《演算法筆記》

《演算法》《演算法導論》《演算法筆記》四本書都有,《演算法筆記》比較適合沒基礎的,而且裡面東西很實用,《演算法導論》裡面太多理論推導,不適用零基礎的!


剛掌握一個編程語言是什麼意思呢?


先看國內的那種薄薄的教材,比如說王曉東的《演算法設計與分析》,然後直接看《演算法導論》。這樣比較省錢而且能掌握的比較紮實。其實我覺得《演算法導論》沒那麼難。


正在看《演算法導論》,之前看過《演算法4》,因為自己屬於那種看書特別毛糙的人。所以個人感覺《演算法導論》適合我認真的仔細讀,因為基本上每一段話就需要十分認真地看,反而比毛糙的看《演算法4》要好。也看了大家的回答,覺得這真的是個個人習慣的問題。


我覺得可以看,大話數據結構:)


推薦閱讀:

有能算出反三角函數的準確值的演算法嗎?
演算法能受到版權保護嗎?
隨機森林中訓練每一棵樹輸入的m個特徵都是隨機選取的嗎?
如果本科已經能拿到BAT演算法offer,是否還有必要讀研?
有什麼網站介紹數據挖掘演算法的實現過程的?

TAG:演算法 | 編程 | 演算法導論書籍 | 數據結構 |