-
1 # 景景景景景色分明丶丶
-
2 # 老七玉
這東西好像過一段日子總是會忘記,估計還是學的太渣了。
剛好一起復習下
排序演算法有8種:
插入排序:直接插入,希爾排序
選擇排序:簡單選擇,堆排序
交換排序:氣泡排序,快速排序
歸併排序
基數排序
反正演算法導論是看得迷糊,演算法書籍一般會寫排序、查詢、樹和圖的執行過程。
排序當然還是要搞懂每種演算法的複雜度,具體程式碼和邏輯。這個過程可能還要了解下計算機 CPU 快取命中率什麼的。
先搞懂每種演算法是什麼,程式碼怎麼寫,再搞清楚為什麼這樣寫。還是得多做題,多練。
練成肌肉記憶了,沒事了再瞅瞅,應該就懂了。
書讀百遍其義自見嘛。
-
3 # 小鴿子看世界
我認為,死記硬背是競爭程式設計的缺點之一。到一定階段之後,為了取得最終的勝利,參賽者必須記住各種演算法的程式碼才行。競爭程式設計的流程如下:
l 選擇一種演算法,掌握它的工作原理。
l 自行用演算法程式設計,不可重寫他人的程式碼。
l 應用。找到最容易解決的問題,代入演算法。
l 研究其他出色的應用案例。
l 最佳化自己的應用,使運算更快,程式碼更短。
l 運用該演算法解決一系列問題。每次都從頭開始重寫程式碼。
競爭程式設計既困難又耗時,但可以讓你對一種算法理解透徹,並迅速掌握從零開始程式設計的能力。
我不是一名“專業的”競爭程式設計愛好者,也從未在這個上面花太多的時間。有時我會跳過其中的幾個步驟,但結果卻讓我出盡洋相,什麼操作也作不了。因此,當我給參賽者出題的時候,我會盡量避免乃至任何需要死記硬背的東西。
-
4 # 為夢而癲
就像我們從小接受的物理化學知識一樣,學完如果不從事該專業工作,我們就忘了。知識是拿來用的,必須用於實際工作中,工作程式設計的時候就要思考,採用其它演算法是否更好,目前採用的演算法是否優秀,讓演算法成為你的習慣,這樣自然就不會忘記了。如果是學生的話,就抽一定的時間反覆理解上機實驗,隔一段時間複習一下吧。
-
5 # 璞玉161072450
記住演算法工具,用java來說,common codec裡基本你想要的演算法都有,你需要做的是記住工具的方法呼叫和演算法優缺點以及複雜度。
真的去記住每一行程式碼怎麼寫,是沒意義的,但是至少要讀過幾遍原始碼,理解原理,掌握使用合理的演算法。
站在前人積累的塔尖,卻要從頭再堆砌一遍,這並不是什麼值得驕傲的事情
-
6 # 快樂搞笑圈
首先必須要說明的是,靠死記硬背絕對是靠不住的。這樣的記住毫無意義。演算法是什麼,演算法是需要結合實際環境進行應用的。老師們都常說,如果你對一個東西足夠理解,那麼就算你一時忘記了。根據一些線索,依舊可以回憶起來。這才是真正的記住。
那麼,如何才能真正的記住呢。毋庸置疑,必須要從演算法的原理入手,為什麼會有這個演算法出來?適用於什麼場合?優缺點?該場合還有什麼演算法可以與之相媲美?這些問題,是學習算大的先決條件。。
解決了如上問題後,接著我們才可以真正的談論演算法程式碼的編寫。編寫也是有順序的,我們不能指望一次性就寫出符合需求的演算法,我們首先要寫出虛擬碼,虛擬碼就是部分程式碼+文字,類似於流程圖的方式說清楚問題的解決方式。
寫完了虛擬碼,然後我們可以根據課本指導或者大神程式碼指導,從真正的程式碼去填充虛擬碼中的文字部分。最後填充完畢,根據程式碼健壯性等原則在最佳化程式碼,進一步在單步除錯。
我相信,這一套流程走下來,一般人至少需要兩天左右,或者更久,之後,就算你想完全忘記這個演算法也是不容易的。。因為他已經和你的實際生活息息相關了。
-
7 # 你看我獨角獸嗎
這個問題問得很好,我那時候也是有著困惑。沒入門的話,先看看幾大經典的排序演算法(直接插入,希爾排序,簡單選擇,堆排序,氣泡排序,快速排序,歸併排序,基數排序),可以把程式碼背誦下來,然後復現。
但最好理解程式碼背後的數學邏輯,當你使用這些基礎演算法的時候,腦海裡有個圖浮現出來,然後你在這上面完善它整個演算法流程。我那時候學習的方法是用撲克牌來學習經典演算法,後面熟了之後就可以在程式碼上快速復現它。
不積跬步,無以至千里;不積小流,無以成江海。現在有個網站是可以用動畫學習演算法和資料結構——VisuAlgo。VisuAlgo是由Steven Halim博士在2011年釋出的一款視覺化學習演算法的工具,用於幫助其學生更好地理解資料結構和演算法,可以讓學生按自己的步驟來學習。下圖是VisuAlgo的主頁,不得不說我上去體驗後感覺很有趣,很適合對基礎演算法的學習和了解,是一個找到後令人驚喜的網站。
VisuAlgo裡面包含了許多先進的演算法,這些演算法在Steven Halim博士的書籍裡都有討論。就某種意義而言,這些先進的演算法視覺化/動畫基本只能在VisuAlgo中找到。例如在圖遍歷視覺化中,裡面不僅標準的深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法,還包含了它們的變異。
之前沒有這個網站時我是用筆和撲克牌來理解演算法的,現在工具方便了,但是道理還在那。知識的體系結構類似一棵樹,如果你想要學得快記得牢固,就必須把主幹和粗線條先學習紮實,因為後來的高階知識類似樹葉,需要有主幹的支援才能掛靠牢固。
-
8 # stormzhang
演算法
演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間複雜度與時間複雜度來衡量。
演算法對於程式設計師來說,即恨又愛。如果你想要進 BAT 公司,那麼你的演算法基礎一定要好,同時演算法又是非常的難學。基礎的演算法有各種排序演算法:插入排序,歸併排序,快速排序,希維爾排序,堆排序等等。對於這些基礎演算法要求你可以白板寫出來。白板寫演算法,即給你一張紙和筆叫你寫出給定的演算法。對於習慣各種程式設計軟體的人來說,白板寫演算法是有一定的難度的。由於習慣程式設計軟體帶來的方便,一個程式設計詞語你只要打出一個字母就會有提示,直接敲回車就打出來。但當你白板寫時,就很有可能忘記這個單詞是這麼拼寫的。
演算法學習建議
演算法既然這麼重要,但同時又那麼難,那我們應該怎麼樣進行學習呢?這裡我給大家一點建議。
1、培養對演算法的興趣
市面上有非常多的演算法書籍,對於剛接觸演算法的人來說,最重要的先培養你對演算法的興趣。興趣是最好的老師。如果你一開始就去學習紅黑樹演算法,我相信沒有一個人能在對演算法產生興趣。對於初學者來說我推薦去看《啊哈!演算法》。
《啊哈!演算法》是一本充滿智慧和趣味的演算法入門書。沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點,透過幽默的語言配以可愛的插圖來講解演算法。你更像是在閱讀一個個輕鬆的小故事或是在玩一把趣味解謎遊戲,在輕鬆愉悅中便掌握演算法精髓,感受演算法之美。
2、進階學習演算法
當你看完《啊哈!演算法》之後,你就會對演算法有了初步的認識,知道演算法是什麼,我們可以利用演算法做什麼。在這期間也能夠培養你對演算法的興趣,從而開始接下來的進階。
進階的書本推薦《演算法》第四版,有人可能會推薦《演算法導論》這本書。但《演算法導論》主要是探討了如何在數學模型寫一個漂亮的演算法,老版還居然使用 pseudo code。非常的晦澀難懂,很難讓人堅持讀下去。在學術上,毫無疑問《演算法導論》更高。
而《演算法》第四版是以 Java 為語言來講解各種經典演算法,從易到難,對每個演算法分析的非常詳細,並且通俗易懂。是非常不錯的一本演算法進階書籍。
3、結合他人部落格進行學習
在學習演算法過程中,你會接觸到各種各樣的演算法,但基礎的演算法就是那麼幾個。對於基礎的演算法,一定是要達到隨時都可以白板默寫的程度。所以在學習演算法的過程中反覆的學習是非常的重要。對於在書本上新接觸到的演算法,可能你會看的似懂非懂,在進行白板默寫的時候,總是會少了幾行程式碼。這就是由於你對這個算法理解還不是非常的透徹,這時候你就可去網上搜索相應的演算法教程。看看別人在學習這個演算法的思路是什麼,在結合你對這演算法的理解。反覆的琢磨,就能非常的牢固記住這個演算法。
4、堅持學習
說的再多,如果你不去做,不堅持學習。你永遠都無法掌握演算法。學習演算法是一個非常漫長的過程,沒有人可以一個月精通演算法。你要做好持久戰的準備。每天為自己安排一定時間,靜下心來認真的學習演算法。那怕你今天只學習到一個排序演算法,但你要知道時間的力量是非常的強大,你每天堅持學習一個演算法知識,看幾頁演算法的書籍,三個月之後,一年之後,你在回頭看看自己的演算法水平。你就會發現原來演算法並不是想象中那麼高深莫測,學習不了的知識。所以行動起來!就從現在開始,拿著一本演算法的書,規劃好每天學習演算法的時間,堅持學習!相信未來的你,一定會感謝自己的努力,大家一起加油!
-
9 # 趣學演算法
演算法不是記的,是用的。程式碼也不是記的,是用的。
沒有基礎的,不建議參加培訓課程,等入門後,提高時可以一報名參加。需要記筆記。刷題,比賽會更有趣,有動力點,比孤軍奮戰要強多了。
-
10 # 嵌入式宏思微想
大致翻了翻,大部分答友都是一本正經地胡說八道,人家題主問的是:競賽程式設計!
參加競賽,當然要記住演算法,大腦一片空白一無所知,競賽啥?!
1.演算法用途。每類演算法甚至每個演算法,都有它的用途,記住用途,可以快速想出解題方案。
2.演算法本質。平時就要對演算法提純,考慮本質,把演算法的本質記住,可以快速的分析問題。
3.演算法實現。這個嘛,記個大概就可以,把框架和核心部分記住,實在記不住,就把思路記住吧。
平時多練習,多做筆記,多歸納總結,重複對記憶具有幫助。
-
11 # Rocky0429
大學的時候是在學院實驗室搞ACM(一種演算法比賽,三人一隊,比賽時長5小時),算是接觸了許多的資料結構和演算法,姑且以我自身的經歷來說一下。
以我自身學習演算法的經歷,學習一個演算法基本上按照以下4步進行:
1.在我準備學習一個新的演算法的時候,首先我會去查這方面的書籍或者去網上找相應的材料,包括部落格或者是paper,但查的最多的還是部落格,一般是CSDN。然後仔細的瞭解該演算法的內容,包括演算法的思想和實現方式,我一般都會把該演算法的實現過程透過自己出的資料在草稿紙上手動模擬一下,這樣可以很充分的瞭解演算法的每一步執行,為之後的Coding打下很好的基礎。
2.理論儲備完成以後,基本上就是Coding,其實對於演算法來講,你如果真的認真做了第一條,其實Coding真的是很簡單的事情,只不過是按照演算法每一步去實現,可能剛開始的時候你會覺得很難,無從下手,這時候你可以去部落格或者Google網上大佬們的原始碼瞻仰,然後根據你所理解的演算法的步驟去手動模擬一下
3.俗話說“只學不練假把式”,接下來就是透過大量的練習,將演算法融會貫通,因為我是搞ACM的,所以我們一般會去各大高校的ACM網站或者做大量的線上的比賽,透過運用和實戰來鞏固和夯實自己的能力。所以這就回到了你的問題上,怎樣記住各種演算法?唯手熟爾,也是我們俗稱的“肌肉記憶”。
4.寫部落格,每次做完題以後寫題解發表在自己部落格上,這也是我們劉老師當初要求的,我一直覺得這是給我養成良好習慣和好的素養的最重要的方面。
PS:下面貼一下原先經常去做題然後儲存的幾個刷題的網站,圈起來的幾個基本上是我以前常用的。
PPS:可恥的貼一下自己的CSDN的部落格,雖然好久不更新了,但是以前寫的好多題解都在,希望可以給你帶來一些幫助
https://blog.csdn.net/u013486414 -
12 # 鎂客網
作為一個程式設計師,如果記不住演算法,那什麼都不要談了,其實記演算法和平時我們背書還是大同小異的,但是如果全部想靠那個爛記憶力死記硬背,當然是萬萬不行的,特別是理科方面的東西。
大學有幾個同學學的計算機與科學,c++,visual basic,,,亂七八糟的一堆程式碼演算法,一頁一頁的紙令人眼花繚亂,但是有個同學,他從來不背書,他只用心看一遍就都會了,應對期末考試小菜一碟,畢業之後不斷的應用自己學到的演算法,提高自己的能力。而相反,有個同學,前面不學,一到期末考試,死命背,還背不下去,結果幾年下來,什麼都學不到,只是順利的畢業罷了,背的東西全忘記了,毫無意義。
其實這種狀況在大學裡是非常常見的,很多人只為了應付期末而不是真正的想學到什麼。平時認真聽,再做題,從理論到實踐,體會演算法自身的精妙之處,還用浪費時間去背嗎?這和高中的數學公式是一個道理,理科,從來就是不需要背的,多實踐,自然就記得很清楚而且很難忘的那種。
演算法是需要結合實際環境進行應用的。俗話說“光說不練假把式”,光有理論而不應用實踐的話,那將失去了它原有的意義。以前一個理科老師說過如果你對一個東西足夠理解,那麼就算你一時忘記了。根據一些線索,依舊可以回憶起來。這才是真正的記住。首先,第一步需要我們去查閱資料,然後仔細的瞭解該演算法的內容,包括演算法的思想和實現方式,其次,瞭解以後就去觀摩模板,理清思路,接著試水。接下來就是透過大量的練習,將演算法融會貫通。透過運用和實戰來鞏固和夯實自己的能力。哪裡還需要去刻意的記住呢?
-
13 # 合肥新華電腦39
你好,大家都說眼見為實,可以實地瞭解,選擇適合自己學習的學校進行學習,選擇大品牌、值得信賴的學校進行學習。
-
14 # 蟻哥小課堂
有電腦了,為什麼還要死記硬背呢?每天都在寫程式的程式設計師,肯定不會花時間在背書上。如果工作中需要用到某些演算法,可以藉助網際網路查詢,也可以自己建立一個演算法庫,用的時候直接呼叫就可以了~
-
15 # Lins號丹
記不完的,而且也不用記。
但是都得知道個七七八八,要用的時候會呼叫或者調引數(狗頭)。實際中哪有那麼多靠自己開發的演算法?主要是現在很多演算法的效能都已經很好了。
回覆列表
演算法不是死記硬背的,首先要嘗試理解它的思想,瞭解這個演算法的基本原理,然後嘗試根據自己的理解去把實現程式碼寫出來,調通以後可以和教材中的答案對比一下,看看有哪些地方可以完善最佳化。