如何才能記住各種算法?

古堡王子


作為一個程序員,如果記不住算法,那什麼都不要談了,其實記算法和平時我們背書還是大同小異的,但是如果全部想靠那個爛記憶力死記硬背,當然是萬萬不行的,特別是理科方面的東西。

大學有幾個同學學的計算機與科學,c++,visual basic,,,亂七八糟的一堆代碼算法,一頁一頁的紙令人眼花繚亂,但是有個同學,他從來不背書,他只用心看一遍就都會了,應對期末考試小菜一碟,畢業之後不斷的應用自己學到的算法,提高自己的能力。而相反,有個同學,前面不學,一到期末考試,死命背,還背不下去,結果幾年下來,什麼都學不到,只是順利的畢業罷了,背的東西全忘記了,毫無意義。

其實這種狀況在大學裡是非常常見的,很多人只為了應付期末而不是真正的想學到什麼。平時認真聽,再做題,從理論到實踐,體會算法自身的精妙之處,還用浪費時間去背嗎?這和高中的數學公式是一個道理,理科,從來就是不需要背的,多實踐,自然就記得很清楚而且很難忘的那種。

算法是需要結合實際環境進行應用的。俗話說“光說不練假把式”,光有理論而不應用實踐的話,那將失去了它原有的意義。以前一個理科老師說過如果你對一個東西足夠理解,那麼就算你一時忘記了。根據一些線索,依舊可以回憶起來。這才是真正的記住。首先,第一步需要我們去查閱資料,然後仔細的瞭解該算法的內容,包括算法的思想和實現方式,其次,瞭解以後就去觀摩模板,理清思路,接著試水接下來就是通過大量的練習,將算法融會貫通。通過運用和實戰來鞏固和夯實自己的能力。哪裡還需要去刻意的記住呢?


鎂客網


算法

算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間複雜度與時間複雜度來衡量。

算法對於程序員來說,即恨又愛。如果你想要進 BAT 公司,那麼你的算法基礎一定要好,同時算法又是非常的難學。基礎的算法有各種排序算法:插入排序,歸併排序,快速排序,希維爾排序,堆排序等等。對於這些基礎算法要求你可以白板寫出來。白板寫算法,即給你一張紙和筆叫你寫出給定的算法。對於習慣各種編程軟件的人來說,白板寫算法是有一定的難度的。由於習慣編程軟件帶來的方便,一個編程詞語你只要打出一個字母就會有提示,直接敲回車就打出來。但當你白板寫時,就很有可能忘記這個單詞是這麼拼寫的。

算法學習建議

算法既然這麼重要,但同時又那麼難,那我們應該怎麼樣進行學習呢?這裡我給大家一點建議。

1、培養對算法的興趣

市面上有非常多的算法書籍,對於剛接觸算法的人來說,最重要的先培養你對算法的興趣。興趣是最好的老師。如果你一開始就去學習紅黑樹算法,我相信沒有一個人能在對算法產生興趣。對於初學者來說我推薦去看《啊哈!算法》。

《啊哈!算法》是一本充滿智慧和趣味的算法入門書。沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點,通過幽默的語言配以可愛的插圖來講解算法。你更像是在閱讀一個個輕鬆的小故事或是在玩一把趣味解謎遊戲,在輕鬆愉悅中便掌握算法精髓,感受算法之美。

2、進階學習算法

當你看完《啊哈!算法》之後,你就會對算法有了初步的認識,知道算法是什麼,我們可以利用算法做什麼。在這期間也能夠培養你對算法的興趣,從而開始接下來的進階。

進階的書本推薦《算法》第四版,有人可能會推薦《算法導論》這本書。但《算法導論》主要是探討了如何在數學模型寫一個漂亮的算法,老版還居然使用 pseudo code。非常的晦澀難懂,很難讓人堅持讀下去。在學術上,毫無疑問《算法導論》更高。

而《算法》第四版是以 Java 為語言來講解各種經典算法,從易到難,對每個算法分析的非常詳細,並且通俗易懂。是非常不錯的一本算法進階書籍。

3、結合他人博客進行學習

在學習算法過程中,你會接觸到各種各樣的算法,但基礎的算法就是那麼幾個。對於基礎的算法,一定是要達到隨時都可以白板默寫的程度。所以在學習算法的過程中反覆的學習是非常的重要。對於在書本上新接觸到的算法,可能你會看的似懂非懂,在進行白板默寫的時候,總是會少了幾行代碼。這就是由於你對這個算法理解還不是非常的透徹,這時候你就可去網上搜索相應的算法教程。看看別人在學習這個算法的思路是什麼,在結合你對這算法的理解。反覆的琢磨,就能非常的牢固記住這個算法。

4、堅持學習

說的再多,如果你不去做,不堅持學習。你永遠都無法掌握算法。學習算法是一個非常漫長的過程,沒有人可以一個月精通算法。你要做好持久戰的準備。每天為自己安排一定時間,靜下心來認真的學習算法。那怕你今天只學習到一個排序算法,但你要知道時間的力量是非常的強大,你每天堅持學習一個算法知識,看幾頁算法的書籍,三個月之後,一年之後,你在回頭看看自己的算法水平。你就會發現原來算法並不是想象中那麼高深莫測,學習不了的知識。所以行動起來!就從現在開始,拿著一本算法的書,規劃好每天學習算法的時間,堅持學習!相信未來的你,一定會感謝自己的努力,大家一起加油!


stormzhang


大學的時候是在學院實驗室搞ACM(一種算法比賽,三人一隊,比賽時長5小時),算是接觸了許多的數據結構和算法,姑且以我自身的經歷來說一下。


以我自身學習算法的經歷,學習一個算法基本上按照以下4步進行:

1.在我準備學習一個新的算法的時候,首先我會去查這方面的書籍或者去網上找相應的材料,包括博客或者是paper,但查的最多的還是博客,一般是CSDN。然後仔細的瞭解該算法的內容,包括算法的思想和實現方式,我一般都會把該算法的實現過程通過自己出的數據在草稿紙上手動模擬一下,這樣可以很充分的瞭解算法的每一步執行,為之後的Coding打下很好的基礎。


2.理論儲備完成以後,基本上就是Coding,其實對於算法來講,你如果真的認真做了第一條,其實Coding真的是很簡單的事情,只不過是按照算法每一步去實現,可能剛開始的時候你會覺得很難,無從下手,這時候你可以去博客或者Google網上大佬們的源碼瞻仰,然後根據你所理解的算法的步驟去手動模擬一下


3.俗話說“只學不練假把式”,接下來就是通過大量的練習,將算法融會貫通,因為我是搞ACM的,所以我們一般會去各大高校的ACM網站或者做大量的在線的比賽,通過運用和實戰來鞏固和夯實自己的能力。所以這就回到了你的問題上,怎樣記住各種算法?唯手熟爾,也是我們俗稱的“肌肉記憶”。


4.寫博客,每次做完題以後寫題解發表在自己博客上,這也是我們劉老師當初要求的,我一直覺得這是給我養成良好習慣和好的素養的最重要的方面。



PS:下面貼一下原先經常去做題然後存儲的幾個刷題的網站,圈起來的幾個基本上是我以前常用的。


PPS:可恥的貼一下自己的CSDN的博客,雖然好久不更新了,但是以前寫的好多題解都在,希望可以給你帶來一些幫助

https://blog.csdn.net/u013486414


Python空間


這東西好像過一段日子總是會忘記,估計還是學的太渣了。

剛好一起復習下

排序算法有8種:

插入排序:直接插入,希爾排序

選擇排序:簡單選擇,堆排序

交換排序:冒泡排序,快速排序

歸併排序

基數排序

反正算法導論是看得迷糊,算法書籍一般會寫排序、查找、樹和圖的運行過程。

排序當然還是要搞懂每種算法的複雜度,具體代碼和邏輯。這個過程可能還要了解下計算機 CPU 緩存命中率什麼的。

先搞懂每種算法是什麼,代碼怎麼寫,再搞清楚為什麼這樣寫。還是得多做題,多練。

練成肌肉記憶了,沒事了再瞅瞅,應該就懂了。

書讀百遍其義自見嘛。


老七玉


這個問題問得很好,我那時候也是有著困惑。沒入門的話,先看看幾大經典的排序算法(直接插入,希爾排序,簡單選擇,堆排序,冒泡排序,快速排序,歸併排序,基數排序),可以把代碼背誦下來,然後復現。

但最好理解代碼背後的數學邏輯,當你使用這些基礎算法的時候,腦海裡有個圖浮現出來,然後你在這上面完善它整個算法流程。我那時候學習的方法是用撲克牌來學習經典算法,後面熟了之後就可以在代碼上快速復現它。

不積跬步,無以至千里;不積小流,無以成江海。

現在有個網站是可以用動畫學習算法和數據結構——VisuAlgo。VisuAlgo是由Steven Halim博士在2011年發佈的一款可視化學習算法的工具,用於幫助其學生更好地理解數據結構和算法,可以讓學生按自己的步驟來學習。下圖是VisuAlgo的主頁,不得不說我上去體驗後感覺很有趣,很適合對基礎算法的學習和了解,是一個找到後令人驚喜的網站。

VisuAlgo裡面包含了許多先進的算法,這些算法在Steven Halim博士的書籍裡都有討論。就某種意義而言,這些先進的算法可視化/動畫基本只能在VisuAlgo中找到。例如在圖遍歷可視化中,裡面不僅標準的深度優先搜索(DFS)和廣度優先搜索(BFS)算法,還包含了它們的變異。

之前沒有這個網站時我是用筆和撲克牌來理解算法的,現在工具方便了,但是道理還在那。知識的體系結構類似一棵樹,如果你想要學得快記得牢固,就必須把主幹和粗線條先學習紮實,因為後來的高級知識類似樹葉,需要有主幹的支持才能掛靠牢固。


如果你對學習人工智能和深度學習感興趣,可以訂閱我的頭條號,我會在這裡發佈所有與算法、機器學習以及深度學習有關的有趣文章。


楊沐白


您好,學習這樣的技術,一定要去大城市尋找規模大,口碑好,師資力量強的院校學習,靠譜,培訓機構的培訓後期短,不易掌握。望採納,謝謝


合肥新華電腦40


算法不是記的,是用的。代碼也不是記的,是用的。

想學算法,首先掌握一門語言,C,C++,JAVA都可以,然後學一本數據結構,然後看一本簡單的算法入門書,程度不太好的,一點不建議你看《算法導論》,大量偽碼證明會讓你崩潰,看圖解多,代碼直接運行的,可以看看《趣學算法》,書比較厚,大量篇幅描述為什麼這樣設計算法,完美圖解演示算法執行過程,幾乎包含了所有經典算法策略。太太太菜鳥的,可以看看《啊哈算法》,裡面講的內容不多,有很多算法沒講,優點是簡單。入門之後,再看《算法導論》就簡單多了,暮然回首的感覺。

沒有基礎的,不建議參加培訓課程,等入門後,提高時可以一報名參加。需要記筆記。刷題,比賽會更有趣,有動力點,比孤軍奮戰要強多了。


翩翩起舞講算法


首先必須要說明的是,靠死記硬背絕對是靠不住的。這樣的記住毫無意義。算法是什麼,算法是需要結合實際環境進行應用的。老師們都常說,如果你對一個東西足夠理解,那麼就算你一時忘記了。根據一些線索,依舊可以回憶起來。這才是真正的記住。

那麼,如何才能真正的記住呢。毋庸置疑,必須要從算法的原理入手,為什麼會有這個算法出來?適用於什麼場合?優缺點?該場合還有什麼算法可以與之相媲美?這些問題,是學習算大的先決條件。。

解決了如上問題後,接著我們才可以真正的談論算法代碼的編寫。編寫也是有順序的,我們不能指望一次性就寫出符合需求的算法,我們首先要寫出偽代碼,偽代碼就是部分代碼+文字,類似於流程圖的方式說清楚問題的解決方式。

寫完了偽代碼,然後我們可以根據課本指導或者大神代碼指導,從真正的代碼去填充偽代碼中的文字部分。最後填充完畢,根據代碼健壯性等原則在優化代碼,進一步在單步調試。

我相信,這一套流程走下來,一般人至少需要兩天左右,或者更久,之後,就算你想完全忘記這個算法也是不容易的。。因為他已經和你的實際生活息息相關了。


不一樣的遊戲


不用背,理解了就行,即使不理解也沒關係,心裡有個印象,知道這個算法主要是解決哪類問題的就好。將來在開發中遇到問題時可以有個解決方向。


CG秀場


有電腦了,為什麼還要死記硬背呢?每天都在寫程序的程序員,肯定不會花時間在背書上。如果工作中需要用到某些算法,可以藉助互聯網查詢,也可以自己建立一個算法庫,用的時候直接調用就可以了~


分享到:


相關文章: