關於數據結構和演算法學習?

本人正在學習數據結構和演算法,面對有些演算法題目,覺得無從下手,很多時候不得不看書或者看別人的代碼才能實現。

比如正在學習的二叉樹,我剛剛看到查找最近公共父節點的部分,自己寫總覺得無從下筆,後來還是看了別人的方法才懂。請問這樣學習會有問題嗎?應該如何做才能更多的自己能寫出而不是看別人的代碼?


if(編程技術熟練){

自己動手寫();

}

else{

看一遍別人的代碼(某個大佬);

自己動手寫();

}

寫得多了就有感覺了


一位學長是這麼和我說的: 明白了演算法寫不出就去看別人的碼,看明白了再自己去從頭寫,自己構思把碼寫出來就代表你真的懂了。去年我剛開始刷ACM題的時候因為沒法理解深度優先的遞歸(請不要噴我就是辣么水)有道題怎麼都寫不出來,拿了大神以前的答案看,看懂了人家的解法發現自己依然寫不出來(每個人的思路都是有區別的,哪怕同種演算法同一個題有時候寫法都會區別很大)。直到在查資料的時候看到一個很有意思的用stack(棧)非遞歸深度搜索的解法,瞬間明白了自己不懂的那個點在哪裡,半小時不到我就寫出了看著發了一星期呆的深度搜索,交上去看到accepted那一瞬間第一次真正感到ACM這種東西確有它獨特的魅力。萬事開頭難,像我這種腦子笨的碰到不會只能靠撞,幸運的是,演算法是可以撞得開的。


謝邀,沒前輩厲害,就講故事,談談看法。

大一新生,開學時說好沒有期中的,卻在考試前一天告知有期中考試。

很多人沒有複習,告知允許某些科目開書,大家都鬆口氣,表示能接受。

然後,好笑的事情就這麼發生了,有書卻找不到答案,驗證那麼一句話:「平時不看書,考試時就算有書給你,你也翻不出答案!」

不及格,白卷什麼的,老師都要氣炸了......

前輩能看書寫出來,或者看別人代碼寫出來,我就已經很羨慕了。

實際上,我也想不看書,不看別人代碼,甚至不需要別人講解,就能寫出演算法題。

可是,我們不是神,只能來一道,思考一道,不能獨自解決,就必須通過外部解決。

剛開始我們學程序,對語法不熟悉時,也不參考書中的代碼,而現在也不是大部分時間可以獨立解決。

凡事都必須有個過程,不是嗎?


作為非計算機專業的學生,我是這樣自學數據結構的:

第一遍,了解各種數據結構的原理,特點。比如:鏈表的元素在內存中隨機存放,增刪元素快,查找慢。棧先進後出。隊列先進先出。對它產生興趣,比如:學了鏈表就可以就可以做個學生成績查詢系統了耶,學了棧就可以做表達式計算器了耶,學了圖就可以做迷宮遊戲了耶!是不是很好玩!所以我要好好學……等等

第二遍,看懂書上的例子。如果實在看不懂就先把指針複習一遍吧,你會恍然大悟的。

第三遍,把書上的例子按自己的思路寫一遍。


很巧,我現在也在複習數據結構。確實如上面答案一樣,需要動手。你就是抄一遍代碼,也是有收穫的。熟能生巧,用在代碼上依然適用。別怕出錯。多百度,多去看csdn上的技術博客。共勉。


謝邀!

其實我也是一隻小菜鳥,個人經驗是多模仿,避免照抄。安利一發學長的代碼,在下正在學習中,打算換Java重新實現一遍。


學演算法有好多辦法,但是想明白演算法之後如何能coding出來卻只有一條路,「無他,唯手熟爾」。


多敲代碼,多練,就算語言換了數據的結構和原理還是不會變


推薦閱讀:

九章演算法 | Google 2016 面試題6 : Count of Smaller Numbers After Self(數組計數)
九章演算法 | Facebook 面試題 : 桌上的戰艦
九章演算法 | Google 面試題 : 最優賬戶結餘

TAG:演算法 | 編程 | C | 數據結構 |