快速實現演算法的能力是否有必要?
01-05
演算法的思想其實還挺容易掌握的。但讓你在短時間內實現一個演算法卻很難,需要熟悉實現的每一個細節。請問這種熟悉有必要嗎?哪些acm大神又是怎麼做到的呢? ——————————————————————— 看到這麼多人回答真是誠惶誠恐啊。大家說得都有一定道理,但我想說的是熟悉代碼細節必須要花費大量時間練習,還要反覆記憶和複習,這種付出的成本是否真的有必要?
那是因為你程序寫的太少,還不熟練,沒法考慮到各種細節。所謂掌握思想但寫不好,一般都是套話或者紙上談兵吧。
最好的演算法學習方法是親自用代碼去實現一遍,你就會發現很多細節了。
題主應該是寫少了。很多人都跟你有類似情況,以為看完演算法,看懂了演算法,寫不寫都無所謂,反正懂了。
但是,要真要讓你寫,你一時半會也寫不好,很多細節都考慮不到,比如,一個簡單的快速排序,你能在三五分鐘甚至是兩分鐘寫出來嗎?
我現在就在看演算法導論,我對自己的要求是"每一個",即用c++實現每一個演算法和數據結構,做成模板,做完每一個編程題和數學題。目前進行到動態規劃那章,除了少數幾個數學題,其他都達到這個要求了。
但是,我還是覺得自己不夠熟,我準備我看完了,再挑選一些演算法再練習,順便刷幾個題目。刷題啊,各種oj。用例通不過的時候你就知道哪裡不對了。這也怪一些書圖省事根本沒有考慮全面。
你說的這種演算法是讓你用來練習實現功底的。
演算法和實現的差別就像點子和產品的差別,需要耗時耗力的打磨功夫。
看懂並不算真正了解演算法,簡單的二分查找寫成死循環都是很正常的事……感覺還是要多練,不然何談理解。
學好一門編程語言,熟練掌握,當你覺得他是一門自然語言的時候,你就可以快速實現你的演算法了。
你能用代碼把你的想法實現這是計算機的基本功,好多人到大三才有這個能力
推薦閱讀:
※演算法用在哪?
※如何將平面上無序的一組點連成一個簡單多邊形?
※遞歸演算法的時間複雜度?
※一副撲克牌,隨機洗牌後,至少有一組相鄰兩張牌數字相同的概率是多少?
※如何做好「推薦演算法」?有哪些常見的錯誤需要避免?