怎麼看演算法書?
首先是你刷演算法題的目的是什麼?要是你對數學、演算法很感興趣,以後想鑽研演算法,那就當我沒說。要是你只是想成為一般的程序員,那麼刷ACM性價比比較低。(我不同意蕭大說的ACM完全沒用,但我同意ACM對一般的程序員來說不是最佳選擇)
演算法(第4版) (豆瓣),能把這本書裡面的演算法和習題全部看明白和實現了,絕大多數情況下你的演算法水平絕對夠了。這本書比較厚,演算法講的淺顯易懂,看書的時候直接看例題的代碼,學習人家的實現。課後練習題的量非常大,全本書的練習題量絕對過1000了(不僅僅有編程題,還有問答、找錯誤代碼等),習題是這本書的精華,一定要仔細認真做。
ACM競賽那些不懂,演算法導論這本書數學證明太多了,而且有些部分太難了,個人感覺沒必要。。這麼看:
《啊哈!演算法》 -&> 《演算法》 -&> 《算導》
分別是:
入門向 -&> 工程向 -&> 科學向
你如果是工程向,看到第二本也就夠了。如果你要搞計算機科學,ACM的東西太淺。
如果你要做程序員,軟體工程師什麼的,ACM的代碼習慣不好
所以ACM基本沒用
說說我自己的感受。
可以說國內的絕大部分演算法書都是扯淡的,甚至沒有看的意義。它們總是列幾個題目,稍微介紹一下演算法,然後丟出一段源代碼。這種東西真不應該叫演算法的,你可以稱之為模版,搜集一下然後在比賽前列印出來以防萬一挺好。演算法之所以為演算法,是因為它提供的是分析問題的思路、邏輯、計算方式,是基於數學的解決方案,而不是一段程序。深搜就要遞歸?動態規劃就是循環套循環?那就是純看國內演算法書的結果了。
學演算法只想推薦一本演算法書,Introduction To Algorithms。因為原版沒有代碼,只有些偽代碼,以及各種參考文獻。剩下的應該去看論文,看思維,看推導,看證明,然後找可以用到的地方,題目也行,項目也好,用自己的方式把演算法實現出來,再去看別人的程序是不是比自己的做得更好,為什麼那麼做會更好,然後再找更多的應用場景,然後會發現原來還有更多實現方法…
不要去看@醬汁蔥推薦的這些《零基礎...》系列爛書,看《Algorithms 4th》(Robert Sedgewick),之後再去刷《演算法競賽入門經典》LeetCode題解
soulmachine/leetcode · GitHub
Coursera:
Discrete Optimization
Algorithms: Design and Analysis, Part II
Algorithms Part II
個人感覺做挑戰程序設計里的練習題更好。
新手入門沒什麼好辦法只能靠多做多練了。
示例代碼讀明白,然後去做後面的練習題。
不過包括我自己,到目前為止我沒見過有人能耐心刷完所有練習題的。
當然,如果你真的做到了,我覺得演算法崗20k每月應該很輕鬆。入門還是可以說上一些的,正好在帶新人。
首先題主說自己剛學完c,這不太妙。先把杭電11頁的題目刷刷吧,練練coding能力。
儘早組隊,儘早決定方向,專攻。看書不用全看,什麼都懂但都不精,是不好的。
coding沒什麼問題就開始搞專題訓練吧。
PS.也有全能型選手,但我能了解到的,都是一些在讀大學之前就有基礎的人。
若把ACM比作遊戲,雖然事實也是,那麼高中生都是專業的,我們這些大學生反而是業餘的,所以專攻是很有必要的。
先上演算法(第四版),基礎演算法拿下了,再去看acm那些奇技淫巧。。。。。。。。
對於還未入門的小菜,推薦兩本入門書
1. 零基礎學演算法 (C語言)
2. java數據結構和演算法 (robert lafore)
看書,學C艹,刷OJ演算法入門經典都說吃力。。算了吧,幫不了你。
===============分割線=================
吃完飯補充點~~~~
不知道題主什麼水平所以分開討論。
1.如果題主文科生或者只學過C語言的工科生。我覺得《零基礎學C語言》、《零基礎學數據結構》、《零基礎學演算法》這三本適合你們,直接上國外教材難度太大了,先補補最最最簡單的知識,而這三本書剛好夠了,裡面例子詳細,挫折感低。(我認識一個非CS專業,C語言考試70分,用了一個學期+寒假+暑假把三本書刷了兩遍,現在是校ACM隊)2.如果題主專業開過C語言和數據結構這門課的話。但是感覺好像沒學過的樣子上《演算法競賽入門經典》,感覺還行的話看《數據結構與演算法分析-C語言描述》Wesley版
上面這些完成了,就可以按需選擇看《挑戰程序設計競賽》、《演算法藝術與信息學競賽》、《演算法謎題》、《演算法心得》、《演算法導論》現在我也是到這種程度~~~~
我不是ACMer,我只是苦逼Coder。
聽說《演算法引論》這本書不錯,但是沒看過。
推薦閱讀:
※演算法競賽和數學競賽對選手的考察點有什麼不同?
※如何通俗易懂地講解牛頓迭代法求開方?
※RSA SecurID 動態令牌的原理是什麼?
※純粹只是一道C++題目,求錯誤分析
※有哪些「上帝演算法」?