看到網上有人說,演算法是這樣學習的:
對於程式設計的初學者,可以先通過簡單的排序演算法了解最簡單的adt線性表的常用操作;然後要重點掌握遞迴技術,包括遞迴和遞推的相互轉換。遞迴技術非常重要,可以通過遞迴技術了解adt棧的操作;接著學習搜尋法的初步——回溯法,研究經典問題八皇后問題和走迷宮問題,通過這些經典問題了解深度優先搜尋法(dfs)和寬度優先搜尋法(bfs)以及adt棧、adt佇列的操作,要學會利用人工設定堆疊模擬遞迴;接著可以學習分治法、貪心法這兩種常用的策略,並應用到排序、搜尋等簡單的演算法中;這時再開始學習圖和樹這兩種抽象資料型別就應該沒有什麼難度了。在學習adt圖和adt樹時,要注意結合離散數學中的圖論理論知識和搜尋法中的dfs,bfs方法,要學會將實際問題轉化為圖論模型;再下去可以學習各種搜尋法的優化演算法,啟發式搜尋、a演算法、a*演算法或界限剪枝法等;然後是網路流演算法,要注意模型的建立;最後學習最優化問題的解法,包括線性規劃、動態規劃、非線性規劃等演算法策略,這部分內容主要側重模型的建立和分析,演算法本身並沒有難度。這樣基本的演算法就學習完了。再深入一點可以學習問題的計算複雜性,計算模型,並行演算法,神經網路以及各個領域中的演算法.
引用自:
演算法學習 Union Find演算法
union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...
演算法學習 KM演算法
km演算法 用於求二分圖的最佳完美匹配 即權值最大的完美匹配 如果你也是個剛來學習km演算法的人 大概的用途肯定還是知道的吧 還是直接說重點吧 首先 理解km演算法前 必須有以下3個概念 1.可行頂標 對於乙個賦值二分圖g x,y,e,w x,y 代表二分圖的兩邊頂點標號 e代表邊 w代表邊的權值 ...
演算法 演算法學習01
貪婪 可以理解為最簡單基礎的求解方式,特點是 短視性 從這個特點入手很容易理解每一步取其最優的原理。雖然最終結果不一定是最好的,但是一定是較好的而且是最簡便的。因此在不過分追求最優結果或者對速度的要求高於結果的情況下,貪婪是不錯的選擇。分治可以理解為大事化小小事好搞,與貪婪的每一步的 串聯 不同,分...