1. 程式人生 > >學習演算法的各個階段的總結

學習演算法的各個階段的總結

階段0(初學乍練,不足掛齒): 學習基礎知識(經典演算法、資料結構等),為了掌握這些基礎知識通過考試在做一些紙上的題目,好一點的會去主動的編一些基本的程式題目。全國50%以上的計算機專業的同學可能都在這階段掙扎著。

階段1(粗懂皮毛,半生不熟): 基本的演算法各類題型都已經見過,簡單的還是難得每種型別加一起至少也刷過200多道,看到原題、熟題、模板題都可以解決,但是一到考察想法、或者很複雜的題目,單靠自己可能想不出來了,需要看解題報告才可解決,但有時候解題看不明白或者看不出來寫解題報告的人水平咋樣,反正照著他的思路寫出來沒問題。

階段2(已有小成,融會貫通):一般難度的題目(leetcode 80%以上的題目應該都是一般難度的、ACM區域賽的部分題也是)都可以獨立解決,雖然有的做的快點,有的做的慢點,但是這種題死磕一下肯定都通過。(就像leetcode把測試資料都給了,就沒有通過不了的)。有了不錯的舉一反三能力。看別人的解題報告也可以知道誰寫的好,誰寫的屎。周圍的同學如果有不會的問題會問你,那些都是小意思。
 
達到階段2的時候,那麼恭喜你,放心吧,只要再加上系統性的訓練,什麼BAT微軟亞馬遜的演算法面試不會難倒你的! : ) 

 階段3(爐火純青, 出類拔萃): 刷leetcode這種非競賽OJ早已經沒感覺了,感覺就是在消磨打發時間。刷OJ也只刷中等偏上或者難題了,這樣才能提高自己。這一階段更重要的是培養臨場競賽能力,什麼Topcoder SRM,Codeforce周賽,谷歌GCJ,百度之星之類的演算法競賽,有時間參加一定會玩一玩,狀態好的時候說不定打個前幾名,狀態差點反正也掉不到哪裡去。Topcoder、Codeforce黃名或者紅名的階段。如果還有兩個志同道合的好隊友,那麼ACM打個金獎也沒什麼問題。

階段4(登峰造極,舉世無雙): Topcoder紅色帶靶心,世界上到這階段的選手其實數的過來,ACM world final的獎牌是曾經的回憶,退役後有空也會玩一下,不小心就是某個比賽的第一名。題目早就不會再去刷了,無招勝有招吧。其實想到這階段,光憑努力一般是不行的。最重要的還是天賦,就是天才那就是1%的靈感加上99%的汗水中的那1%的靈感。

我想你糾結的就是如何從第一階段到第二階段吧,其實第1階段到第2階段,要注意如下幾點:
1.刷題的數量,只有量變才能引起質變。在想從第1階段到第2階段,應該得有300-500道題目的積累,有半年-1年的刷題經驗。
2.刷題的質量,刷水題那是不可能到第2階段的,還是得做一些有難度(考思想),複雜(考編碼量)的題目。
3.總能問題的能力,其實想舉一反三,最重要的是總結,總結每種型別的題型為什麼可以這麼出?為什麼難?出題者的思路是什麼?
他想給我設計什麼坑讓我無法通過?

做以下這些:
1.如果為了準備面試,刷leetcode至少得達到200-300題,且這些題目都得好好總結著刷,一定保質保量,寫寫解題報告給大家看看也是不錯的方法。
2.如果為了準備演算法競賽,好好打基礎,推薦一本書,劉汝佳的《演算法競賽入門經典》,推薦一個網站

http://train.usaco.org/usacogate
最基礎的競賽訓練網站,充分練習編碼能力。

同學加油!你可以的。 : )

以上文章在網上看到,本人目前沒辦法總結出來這樣的東西,希望和大家一起學習,共勉!