導航:首頁 > 源碼編譯 > 演算法導論怎麼學

演算法導論怎麼學

發布時間:2022-09-18 03:32:14

演算法該怎麼學感覺好難

很多人都會說"學一樣東西難",一開始我也覺得很大程度是因為每個人的智力水平等等不可改變的因素. 但是後來我發現,有一個東西也很能決定一個人是否會覺得一樣東西難學,那就是理解方式.

一件事物通過不同的途徑讓一個人理解效果差異是很大的.就比如說數學裡面教你一個圓,有的人看到一個圓就能很快明白什麼是圓,有的人卻非得看到x^2+y^2 = r^2這種式子才有感覺,甚至有的人需要"到定點距離為定長的點集"這種描述才能理解. 那這個不一定是說誰的智力水平更高,而是因為他們對不同形式事物的敏感程度不同.


回到演算法上來.演算法本質是一種數學.他是抽象的操作集合.(看這么說你可能會覺得不知所雲,但是如果我說他只是一種解決問題的辦法可能就好理解). 所以很多書,論文,或者很多老師教的都是一種數學描述的演算法,這樣子的演算法就我個人而言相當難理解,看了就想到代數高數什麼的.. 但是如果找一個圖文並茂的解釋,或者找個人一步一步把一個演算法給你我比劃一下,我立刻就能理解. 說白了,就是你一定要找很多很多不同的角度來嘗試接受一種東西,你一定可以找到一種你相當敏感的角度,用這個角度學習你就會游刃有餘. 智力因素並沒有太大影響的.


具體點說,你可以試試這幾種不同的角度.

  1. 直接看數學形式的演算法.我個人最無法接受的形式,但是有人很喜歡..例子就是演算法導論上面那種描述.

  2. 聽一般語言描述,最理想是找一個明白的人,給你用通俗語言講講原理.這個不錯,很多我是這么理解的

  3. 圖形理解,叫理解的人給你畫插圖,分布圖,結構圖等等,來分解一個演算法,找到他的思路.說到圖,有一個人的博客這方面做得很好:matrix67.

  4. 程序理解.找到一種演算法的實現程序,對著程序理解,可以嘗試分布運行,觀察一下變數的變化,這樣來理解演算法.

  5. 實在太難的演算法,可以邊寫邊改來理解.當時我學習插頭dp的時候就是這樣,不論怎麼總是一知半解,最後硬著頭皮寫了一遍,改了很久,但是改過了的時候,也就真的明白了是怎麼回事了.


也許還有別的什麼辦法,因為人對事物的接受角度實在是太多了.多想想你平時學習什麼比較容易,找出你最敏感的理解方式就行了.


有感而發說的一些東西,不一定都是正確的,只供參考,歡迎指正.

㈡ 學習演算法導論是不是需要把高等數學,線性代數,概率論先學會

不用啊,《演算法導論》是一本計算機書籍,你只需要學好其中的知識點就可以了。高等數學,線性代數,概率論,這些課和他無關緊要啊。當然,如果你學了這些知識,對你學計算機會有所幫助的。

㈢ 學習演算法導論需要什麼數學基礎或者其他的基礎嗎

演算法導論的數學基礎要求不是很高 確切的說老外的書 對於數學的要求都不是很高 但 人家要的是研究的態度 線代 高數 還有一點點的離散數學基礎就可以了

㈣ 演算法導論是講c的演算法還是整個演算法。適合什麼時候看。我現在入門c語言。以後該怎麼個學習法。

講的當然是演算法的經典理論知識和方法,這些理論和方法用在其他編程語言仍然是通用的。當然書中可能會用c語言寫的代碼作為例子來講解。
學習一門編程語言和學習演算法是密不可分的,系統的演算法知識有助於編程語言的靈活運用,而一定的編程語言基礎又有助於更好地理解演算法的精髓。
如果你在學習C語言之前,有一定的編程基礎,那麼建議現在就開始學習演算法導論,這樣有助於你C語言的學習。
如果你無任何編程基礎,還是建議先從學習C語言開始,等有了一定的編程基礎之後再去學習演算法導論,才能讓你的編程能力更上一層樓。

㈤ 演算法怎麼學

貪心演算法的定義:

貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,只做出在某種意義上的局部最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。

解題的一般步驟是:

1.建立數學模型來描述問題;

2.把求解的問題分成若干個子問題;

3.對每一子問題求解,得到子問題的局部最優解;

4.把子問題的局部最優解合成原來問題的一個解。

如果大家比較了解動態規劃,就會發現它們之間的相似之處。最優解問題大部分都可以拆分成一個個的子問題,把解空間的遍歷視作對子問題樹的遍歷,則以某種形式對樹整個的遍歷一遍就可以求出最優解,大部分情況下這是不可行的。貪心演算法和動態規劃本質上是對子問題樹的一種修剪,兩種演算法要求問題都具有的一個性質就是子問題最優性(組成最優解的每一個子問題的解,對於這個子問題本身肯定也是最優的)。動態規劃方法代表了這一類問題的一般解法,我們自底向上構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,並且以其中的最優值作為自身的值,其它的值舍棄。而貪心演算法是動態規劃方法的一個特例,可以證明每一個子樹的根的值不取決於下面葉子的值,而只取決於當前問題的狀況。換句話說,不需要知道一個節點所有子樹的情況,就可以求出這個節點的值。由於貪心演算法的這個特性,它對解空間樹的遍歷不需要自底向上,而只需要自根開始,選擇最優的路,一直走到底就可以了。

話不多說,我們來看幾個具體的例子慢慢理解它:

1.活動選擇問題

這是《演算法導論》上的例子,也是一個非常經典的問題。有n個需要在同一天使用同一個教室的活動a1,a2,…,an,教室同一時刻只能由一個活動使用。每個活動ai都有一個開始時間si和結束時間fi 。一旦被選擇後,活動ai就占據半開時間區間[si,fi)。如果[si,fi]和[sj,fj]互不重疊,ai和aj兩個活動就可以被安排在這一天。該問題就是要安排這些活動使得盡量多的活動能不沖突的舉行。例如下圖所示的活動集合S,其中各項活動按照結束時間單調遞增排序。

關於貪心演算法的基礎知識就簡要介紹到這里,希望能作為大家繼續深入學習的基礎。

㈥ 演算法到底應該怎麼學

刷與不刷ACM ICPC的人在演算法能力上會有巨大差距。
如果真想深入掌握各種演算法,還是先刷題吧。刷到一定境界再去看更高級的演算法書。
不得不承認現實生活中,一般碼農工作對演算法能力要求太低了,這一度讓人們(包括我)認為演算法似乎不那麼重要。其實學習演算法所鍛煉出來的對各種問題敏感的反應和融會貫通能力還是非常重要的。
編程嘛,就是操作數據輸出結果
演算法和數據結構是配套的,你應該掌握的主要內容應該是:
這個問題用什麼演算法和數據結構能更快解決
這就要求你對常見的結構和演算法了熟於心,你不一定要敲代碼,用紙手寫流程是更快的方式。
對你不懂的數據結構,你要去搜它主要拿來幹嘛的,使用場景是什麼。
細節出錯是你對編程語言不熟悉才會導致的問題,跟你懂不懂演算法沒關系,這個你應該多寫寫練手小程序,背代碼是很愚蠢的行為。
其實我覺得你這么迷茫不如實現一下stl的函數好了
我的經驗就是去模擬(當然模擬只限於基礎的演算法)。甚至是手動模擬,比如我之前學深搜,學遞歸,代碼很簡單,但是因為涉及到棧,而你的大腦短時間內存儲的棧深度只有幾層(臨時變數越多你大腦能模擬的棧深度就越少),實際上你沒辦法用大腦去想。比如學習圖的深搜,一開始我是不理解的,對遞歸沒辦法理解。後來我就在紙上模擬出來,建立好鄰接表以後,按照代碼步驟一步步紙筆來模擬,慢慢就知道了代碼的工作過程。你學習快排也是,當然你背代碼也能寫出來,但是可能不理解,很快就忘了。《演算法導論》書上就有比較細致的執行過程,你手動模擬下partition和quicksort的過程,一開始就用很簡單的用例,把整個過程都手動執行一遍,慢慢就了解了。很多演算法都有一個循環不變式,你代碼如果邏輯正確並且能夠維持循環不變式,一般寫出來就是正確的。
建議找本《演算法》或者《演算法導論》這些教材,每學習一個演算法就先大致瀏覽下, 然後細致分析每一步代碼的執行過程(紙筆模擬或者代碼單步調試),當確認你真正明白之後,嘗試不看代碼就靠對演算法過程的了解和正確的邏輯去自己實現。
當然,我不認為你寫出很多演算法就是高手了,現在大部分高級語言不需要你重復造輪子,你造出來的質量也遠遜於庫中那些高手的代碼,可以去學習他們代碼的實現,比如看看stl源碼。真正工程用到的代碼與一般演算法實現還是有很多改進的。
最重要的不是你會寫這些演算法了,而是學會了很多思想。比如二分的思想,遞歸的思想,分治的思想,動態規劃,貪心等,以及現實中很多數據結構的抽象等。難的不是學會了演算法,而是如何運用這些演算法思想去解決問題。

㈦ 《演算法導論》有什麼好的學習心得

本人沒有讀過這本書,文化水平不夠,就算讀了估計也是不知所雲,這個應該是比較專業的人看的吧,那我只能從網上摘錄些供大家分享。

推薦每學一個演算法,就去各個OJ(Online Judge)找一些相關題目做做,有時理論讓人很無語,分析代碼也是一個不錯的選擇。

㈧ 大學的數據結構學過一遍,但是都不怎麼熟悉,然後現在想學演算法,該怎麼開始學

首先數據結構是研究數據的存儲的,雖然在這個過程中也會誕生很多有意義的演算法,比如圖、樹等等;
對於數據結構的話,你先買一本書,把書上的每一章節過一遍,然後到Leetcode或者是牛客網上找題,從數組、到鏈表、到樹、到圖,都過一遍,然後你不是不怎熟悉嘛,所以要多看別人的解析,遇到不懂的地方立刻查。
對於演算法的話,我覺得還是找一些面試書來看比較好,經典演算法要記住,改進的演算法要弄清原理,畢竟演算法有很多,不是一時半會就能看完的,面試書比較實用,內容也基本夠用。

㈨ 請教演算法導論這本書怎麼樣適合什麼程度的學習者

適合了解一門或以上編程語言的人,即使你沒學過數據結構也沒關系,因為它把數據結構中的演算法從基礎到非常深入全部都包括了,個人建議你先把C語言用熟悉了,然後再去看,演算法導論,如果有決心看完,數據結構都不用看,因為你看完演算法導論,就等於學會了非常高級的數據結構,但是看完很難。。。

至於C++,可以順帶著學一下,然後用C++自己把演算法實現一下,等於練兩倍。
也不一定非得學C++,可以學習Java或者C#,看你的發展方向

閱讀全文

與演算法導論怎麼學相關的資料

熱點內容
linux系統記錄 瀏覽:127
linuxusb驅動下載 瀏覽:34
梁特殊箍筋加密區公式 瀏覽:141
web應用安全pdf 瀏覽:47
linuxintel網卡驅動下載 瀏覽:217
資源解壓後怎麼刪除 瀏覽:868
編程之美15種演算法 瀏覽:147
java的圖形用戶界面設計 瀏覽:769
算數游戲源碼 瀏覽:999
壓縮機工作聲音判斷 瀏覽:985
事業單位程序員 瀏覽:506
易語言取相似顏色源碼 瀏覽:773
pyodbclinux 瀏覽:585
vivo為什麼把伺服器沉到深海 瀏覽:460
程序員能為電商做什麼 瀏覽:401
騰訊直充qq號加密碼 瀏覽:140
qt搭建msvc編譯器環境 瀏覽:338
單片機晶振壞了會不會工作不穩定 瀏覽:770
天天影迷APP顯示連接伺服器失敗怎麼回事 瀏覽:961
鋼鐵命令同盟第七關怎麼過 瀏覽:7