Algorithm - 3週不間斷學習演算法之心得
這個禮拜花了大量的時間研讀演算法,紀錄下學習過程與心得。
清點在這一週中學到了什麼
- 了解演算法所解決的問題(Problem)
- 了解各個演算法的解決問題策略與方式。
- 部分的演算法我能夠以Java來實現。
- 了解了足夠數量的演算法。
學習演算法的三個階段
- 看的懂演算法,並且能用真正的程式語言實現出來。
- 了解演算法,可以利用演算法的特性解決教科書以外的問題。
- 設計演算法,這部分需要進修另一門課 - 演算法設計。工作或研究上有需求才進修至此階段。
一般學習上到第二個階段就足夠了。也就是說有兩個大方向,一是實現演算法,二是以課本上的演算法為基礎學習其他的演算法。這樣一來就不難聯想,如果我要比別人有優勢,我要:
- 了解每個演算法所解決的問題。
- 熟練實現演算法的過程。
- 了解除了課本上基礎演算法的變形,讓演算法可以適用在更多的場景。
- 演算法會用到許多的資料結構,學習演算法的同時可以幫助了解資料結構的特性。
沒有學習過演算法的人可能需要花一些時間了解這個演算法怎麼使用,而我可以快速並且更正確的使用它,減少冤枉路。演算法的變形建立於某演算法的特性之上,因此學習演算法的變形可以更了解演算法的特性。
實現(implement)的方式
implement的方式以課本的為主比較好,等到實作出來了以後再看看別人怎麼寫,不然網路上的寫法其實非常多種,令人眼花撩亂,要找到一個符合自己口味的並不是太容易。幸運的找到了一個符合調性的blog也有可能作者用不同的寫法來寫,學習上並不特別效率。自己實作是比較理想的做法,訓練把自己的想法轉變為程式的能力。是個不錯的努力方向。