【我走過的彎路】
我不是科班畢業的學生,帶我的leader說要打好計算機基礎,演算法是乙個基礎。一般就會網上一搜『如何學好演算法』,這麼一搜就會有很多的答案:
人們說,演算法導論/segdewick的演算法好;
人們說,初學者不要看演算法導論很難;
人們說,小白先看演算法**;
人們說,清華大學的鄧俊輝老師的網課講的非常好,堂堂爆滿;
人們說,coursera上的網課非常好。。。
於是,在最初的時候,我一看大家說好的書都買,還花了2k買鄧老師的課,被同事知道後嘲笑了一番(你為啥還要花錢買課啊,自己看書不就好了嗎),但看了第一課就放棄了,因為覺得太慢了,講的太細了(又被同事嘲笑了一番,竟然還嫌別人講的慢)。還買了極客時間的小爭哥的課,但沒有看。書那麼多到底看哪本啊,每本書也那麼厚,怎麼看完啊,演算法**看了一點點也看不懂,更不可能看演算法導論了吧。很多時間都陷入在看『如何學演算法』的攻略裡,也很多時間陷在看別人的經驗裡。但是,連第一章都沒有看完過。
後來遇到乙個阿里的前輩,已經在演算法領域做了很多年了。他說對他影響很大的是斯坦福的《algorithms: design and analysis》,其實我對自己的英語能力很懷疑的,而且大家都說演算法很難的,我肯定這個也是不能學完的吧。但是他說,得珍惜現在的科技。早年他那個年代,想要去學習國外好大學的課,還要越洋,而現在的學習成本很低了。所以我就決定跟著這個前輩的建議來做。
【我是如何學的】
我的資料就是: 《algorithms: design and analysis》網課+演算法導論+這門課配套的教材《algorithms illuminated》
定義學完的目標(這點很重要,定義了目標就知道自己學這個東西是在填補什麼):
對於每個演算法要搞懂這個演算法為什麼會有,背後的思考方式是什麼,要掌握它的由來、原理、實現、複雜度分析、適合解決的問題、應用場景。
作業正確率》80%。
這樣的情況下最後學完作業正確率是93%。本來可以刷到100%,但是我沒有去刷,因為刷到100%可能內心就覺得這塊可以放下了。
在頭兩周的時候,我就是看不懂的反反覆覆的看,但是花的時間多,效率低,晚上睡覺也不踏實,覺得遙遙無期,覺得自己需要轉行了,甚至還為'為什麼就搞不懂啊'大哭了兩次。
【學完的微小經驗】
別人說的難和易
之前一直恐懼不敢看《演算法導論》,因為大家都說難,總去看別人說簡單的東西,然後簡單的看不懂,就覺得簡單的看不懂難的更看不懂吧。直到我真正去翻看的時候,才發現它寫的多麼好,我當時甚至都在疑惑寫的這麼清楚直白的怎麼大家會說難,已經寫的很清楚了還要其它什麼書做鋪墊幹嘛。所以也還是不要全信網上的,得自己去感受,自己衡量。
篩選你想要的資料
演算法的書和資料有很多,它們的名字都取的一樣,但是關注點是不一樣的。有些資料關注在灌輸演算法的內容,比如乙個排序都要給你弄幾個方法出來;有的就關注在演算法背景,為什麼會有它,它的出現是為了解決什麼東西。
我比較喜歡的資料是關注後者的。
乙個經典就夠了
【大學相似的經歷】
大學的時候我就發現乙個奇怪的現象。每當我課堂上能聽懂的課,課下作業一下就解決完的課,最後期末考試成績總是上不鳥90分;而那些我上課聽起來很吃力,做作業也很吃力,最後期末考試的分數總是接近滿分。
對於這兩類課我的處理方法是:
當課堂能聽懂,我課下就根據教材稍稍看看,回顧一下,甚至連回顧都不用就能把作業做完,做完就關了書做其他的了。
而對於課堂不能聽懂的課,腦子裡有許多的名詞,但是連不起來,也不知道這些名詞是什麼,就有非常強大的驅動力去想要搞懂,會去圖書館找很多的相關參考資料,然後為了乙個主題會看不同書的解釋。這種情況下把作業做了,把課堂的內容搞懂。我記得有門數學專業課,期末有三分之一的人沒有及格,90分以上的只有兩個,我用這樣的方法那門課得了98分。
我甚至還試過,既然搞懂的點是在自己參考更多的書,主要人是自己,那就不需要去課堂聽老師的課了。然而當我這麼實踐的時候,我發現效率很低,書也看不進去,進度反而慢了。所以關鍵點就是在課堂上聽些名詞,讓這些名詞在腦海裡轉啊轉,我當時自己把這個過程叫『打點』,因為這些『點』才會產生大的驅動力去參考更多的資料,我當時把這個搞懂這些點的過程叫『連線』。
工作後也有這樣的情況: 沒事的時候看文件怎麼也看不進去,自己的**裡發現了乙個bug恨不得把文件上的每個字都扣下來。
【相似的讀書理論】
後來我發現其實別人已經總結過方法的,乙個讀書方法就叫『影像閱讀法』,其中有一步就是『尋找觸發詞』,是說先把書整體快速翻一遍找到其中存在感比較強的詞。你會這些詞產生好奇,想要知道它是什麼。下一步就是『啟用觸發詞』,就是再細讀去解答之前的『觸發詞』。
所以其實在課堂上聽課但聽不懂也是有意義的,是在聽『觸發詞』,這些觸發詞會驅使你去看更多的資料『啟用』。
我的演算法學習之路
我走過的彎路 我不是科班畢業的學生,帶我的leader說要打好計算機基礎,演算法是乙個基礎。一般就會網上一搜 如何學好演算法 這麼一搜就會有很多的答案 人們說,演算法導論 segdewick的演算法好 人們說,初學者不要看演算法導論很難 人們說,小白先看演算法 人們說,清華大學的鄧俊輝老師的網課講的...
演算法學習之路
目錄 演算法學習之路 一 前言 一 書籍 二 學習內容 1.空間複雜度,時間複雜度 2.貪心演算法 總結 由於長期沉迷摸魚哲學,感覺自己已經快廢了,決定今天開始學習一些演算法資料充實自己,希望不要三分鐘熱度吧。使用的學習書籍是csdn中自帶的 趣學演算法 看過很多演算法的教學書籍了,開頭都是老面孔了...
演算法學習之路
第一階段 練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡 因為太常用,所以要練到寫時不用想,10 15 分鐘內打完,甚至關掉顯示器都可以把程式打 出來.1.最短路 floyd dijstra,bellmanford 2.最小生成樹 先寫個prim,kruscal要用並查集,不好寫...