小夕的算法入门之路
小夕都快要成XX入門指導專業戶了QAQ,小夕是要寫人工智能和計算機干貨的啊喂~好吧,問小夕如何入門算法的小伙伴太多了,還是寫一篇文章吧。
小夕還收到了“如何準備托福”和“如何準備考研英語”的求助,然而小夕沒有考過,實在幫不上啦(′Д` )
前言
由于小夕不是專業打ACM的,算法功底在目前來看只能說勉強夠用,因此小夕只能提供最基本的入門指導啦。完成后,可以找算法大神來幫你提升或者像小夕一樣做其他方向的研究。
?
對于小夕的算法水平,真怕說出來后大把掉粉T_T。以前刷過leetcode,只刷了五六十道。總體來說,easy難度的沒什么問題,middle的大部分還是能磨出來的,hard難度的只能說偶爾解決幾道了。所以對于已經可以無壓力middle的同學,可以關掉本文了。。。
?
以小夕的研究領域來看,算法當然是必不可缺的。雖然斐波那契堆、攤還分析這些比較高級的數據結構或算法在小夕的領域還沒有遇到過,但是像分治、搜索、圖算法、動態規劃、貪心等算法或算法思想可以說無處不在(當然,第一次在信息檢索領域遇到B樹時還是很惶恐的)。完成該計劃后應該是本科生的算法水平的(當然,肯定比國內大部分高校對本科生的要求高,2333)
正式開始之前,小夕再聲明一下,算法入門之路有很多,小夕不能保證小夕的這條道路是最優的,但是這條道路確實是小夕親身走過的,并且已經把小夕在途中遇到的坑給跳過了(比如某些渣書)。
?
首先,在開始之前建議掌握Java的基礎語法,只需要面向過程的基礎語法就可以。
?
基礎數據結構
書籍
《數據結構與算法分析-C語言描述》Mark Allen Weiss;
或者《數據結構-C++語言版》鄧俊輝;
或者《數據結構與算法-java語言版》Adam Drozdek。
?
書籍說明
????本科學校用的是第一本教材,感覺挺不錯的。有C語言基礎的同學極力建議第一本。
????第二本和第三本我沒有看過,但是身邊看過的同學反映還可以。所以如果實在不會C的話,可以看第二本或者第三本。
????C/C++/Java都不會?請回溯到編程語言的學習環節。
?
學習方法
????根據你所選用的書籍,理解并可以熟練復現下述數據結構及基礎操作(如添加刪除元素、遍歷等),并掌握算法復雜度分析的基本方法。
順序表
鏈表
樹
散列(哈希)
圖
最多了解一下遍歷就好,復雜操作暫時不需要掌握。
?
基礎算法
書籍
《算法》(第四版)Robert Sedgewick
《算法導論》ThomasH. Cormen等
?
書籍說明
????小夕的體驗來看,《算法》比《算法導論》更適合初學者。可以說,掌握了Java和基本的數據結構,就能一路停不下來的將這本書啃完(嗯~小夕就是停不下來的那一只)。這本書的英文版炒雞可愛,是一個很標準的紅色方塊!所以大學里某段時間小夕完全淪陷在了這本小紅書中。對了,小紅書有電子版(官方的),炒雞精致,可以體驗一下。中文版是橙色的。
????而《算法》的缺點就是講的實在太良心了,所以厚厚的一本書并沒有像算法導論一樣覆蓋面那么廣。因此對于動態規劃、貪心算法等高級算法設計思想,還是要求助《算法導論》。
?
學習方法
if(像小夕一樣喜歡啃書){
? ? 首先將《算法》直接啃完(邊啃邊練)。如果時間不充裕,可以放棄最后一章(字符串)和第三章中的“平衡查找樹”。其他章節最好不要省了,都是基礎中的基礎了。
????然后將《算法導論》的第十五章“動態規劃”和第十六章“貪心算法”啃完,并代碼實現一些經典問題如LCS(最長公共子序列)。
}
else { ?
???小夕推薦一下coursera平臺上斯坦福大學開設的《算法》課程,如下圖
(誒?小夕當時學的時候是叫“算法設計與分析”,現在變成算法專項了。不過看了一下目錄,內容應該變化不大)
?
????可以跟著這門課的教學計劃來,手頭的《算法》和《算法導論》作為參考書足夠了。時間不夠的話可以只完成該課程的前三個階段。
????不過這門課的老師書寫很潦草(不知道現在有沒有長進),語速也蠻快的,英語不好的同學還是要以書籍為主。但是這個課程的課后習題和編程題非常良心,認真做出來后收獲會很大的。
}
/*
*/
總結
- 上一篇: Category 特性在 iOS 组件化
- 下一篇: 美团开源 Logan Web:前端日志在