想加強自己的演算法水平,求指出一條明路?

我是一名一名普通大學大二計科專業的,由於老師過於垃圾,所有內容都是自己自學,目前已學C,C++,Java,並能獨立開發一些簡單的android app,以後也想走移動開發的道路,但是學編程一年多點了,除了學校的垃圾數據結構課,基本沒有接觸演算法。我想要提升自己的演算法水平,請問各位前輩有什麼優秀的Acm OJ平台和演算法書推薦嗎?


謝邀。

答案很簡單,就是多刷題。但是要掌握正確的學習方法。學習演算法,要學會把演算法流程在腦中可視化。之所以這麼講,是因為之前看到一個google面試官在quora上分享,說好的candidate不只是理解演算法,他們似乎可以"看到"整個演算法的流程。掌握演算法要達到這種程度。死刷題不消化,絕對是事倍功半的。

對刷題成長路線,提出我個人的一點想法。如下,刷題分幾個階段

手中有劍,心中無劍

初學者階段:剛學會某演算法,但是還沒有真正吃透理解,還不能做到靈活運用,遇到該演算法對應,但是比較隱晦的題目,還想不到用某演算法。這時候要多刷同類型題,刷完了多體會多總結。

手中有劍,心中有劍

等某演算法掌握到可以比較靈活運用的時候,基本上同類型或相似類型的題就會比較有把握,ac率也比較高。但是在這個階段,看到某些天外飛仙一樣的非常規解法,肯定會在心裡「我k還能這樣」?這個時候自己的思路會被學到的演算法障礙,總會想這個演算法行不行,行是為什麼,不行又是為什麼?

手中無劍,心中有劍

這個階段的『手中無劍』是說自己心中的演算法已經不成為解題的障礙,可以做到見題拆題,完全可以深入到某題的情景中,可以完全圍繞題目的特性來思考,從而可以提出別處新意的題解,而不會慣性思維導致思路狹隘。

手中無劍,心中無劍

對各種題各種演算法,眼裡已經沒有很明顯的分別。某些演算法之所以這樣,不是因為如何,它就應該是這樣,這麼做就順應天理,不需要努力勸自己說這麼做就是對。同樣,對題和題也不會覺得有太多差異,因為某題那麼解就是應該的,沒有為什麼,感覺,天理。

以上。自己一點想法,輕噴。


謝邀。

入門的話,可以看一看劉汝佳的《演算法競賽入門經典》(紫書)。

其實並不需要每個例題都能做,只需要書裡面講的每個演算法都能寫而已。期間請去OJ上做這類演算法的題。傳送門:Vijos 洛谷 CODEVS

看完書可以把 清橙 題庫的前100題花幾個小時做掉。

完事了之後可以按照hzwer這份大綱搞下去:省選演算法匯總

數據結構還是很好搞的,題刷起來也比較無腦。

可惜一入數學深似海,我現在連杜教篩都不會了QAQ。


刷500道題、看10000道題,你就很強了,如果做不到,那麼刷500道題,看1000道題就夠了


我的演算法很菜的!

看各個演算法大神,一靠數學底子好(天分),二靠刷題(勤奮),刷個1000小時,應該就很厲害了


浙大oj,狂刷


讀代碼


我推薦一本很偏門,不符合知乎政治正確的書,天勤的考研筆記數據結構篇。誰用誰知道,對理解演算法過程和面試筆試作用都很大。什麼演算法導論的,都是給科學家看的抽象描述,技術含量很高,但是容易變成看天書。

因為不符合知乎政治正確,匿了


刷題 沒有別的辦法

高中演算法競賽出身,現在大二,也在搞ACM

看書可以看看劉汝佳的白書和演算法黑書打好基礎

選個題庫cf什麼的 開始刷

可以自己寫寫博客(這個個人覺得還是有點用的)

每天兩道 一年後 你就自己來答這題了

刷題注意梯度

別剛學搜索就去做A* 先從簡單的刷起 然後逐步加深

會碼和會 是兩個概念 不要背演算法 要理解

多刷刷題 總是會的 我一直堅信這個


不瀉藥。

圖書館有acm的入門書,我記得,是很薄的一本,我當時把上面的例題看完就差不多入門了。

然後leetcode上面的一些題目,easy, medium,hard可根據自己的水平去玩一玩(150題之後的部分medium和hard題目已經有一些難度了)。

對新手比較友好,而且都是一些大公司的面試題,對於不搞acm的人針對性高一些。


沒有什麼途徑。

  • CLRS

趁有空不擼這本書什麼時候擼?

加上

  • LeetCode Online Judge

完.


同樣一名普通本科大二學生,而且我們情況差不多,大一時進入了ACM(我們學校的ACM屬於那種蒟蒻型的),在裡面完全混了一年。平常會在杭電,和codeforces上水水題,打打bc、cf啥的。。


推薦閱讀:

參加世界三大超算競賽是怎樣一種體驗?
應該向系統里加入怎樣的邏輯,使得交易系統能夠根據市場情況調整參與頻率?
國內的股票型公募是如何在資金量如此巨大(單只產品數十億)的情況下進行交易的?組合中通常包含多少只股票?
如何準備藍橋杯,以及現階段一些迷茫?
多線程排序C++怎麼實現才是編寫效率和運行效率都很高的方案?

TAG:演算法 | 演算法設計 | 演算法與數據結構 | ACM競賽 |