演算法設計 幾大演算法簡介

2021-10-01 07:59:44 字數 1158 閱讀 4479

1.貪心演算法

貪心演算法分為幾個階段,在每乙個階段,可以認為所做的決定是最好的,而不考慮將來的後果。一般來說,這意味著是某個區域性最優,這種「眼下能夠拿到的就拿」的策略就是這類演算法名稱的**。當演算法終止時,我們希望區域性最優就是全域性最優,如果真是這樣的話,那麼演算法就是正確的了;否則,演算法得到的就是乙個次最優解。如果不要求絕對的最佳答案,那麼有時用簡單的貪心演算法就可以生成近似答案,而不是用一般來說生成準確答案的複雜演算法。

2.分治演算法

分而治之方法與軟體設計的模組化方法非常相似。為了解決乙個大的問題,可以:

1) 把它分成兩個或多個更小的問題;

2) 分別解決每個小問題;

3)把各小問題的解答組合起來,即可得到原問題的解答

小問題通常與原問題相似,可以遞迴地使用分而治之策略來解決。

分而治之方法很自然地導致了遞迴演算法的使用。在許多例子裡,這些遞迴演算法在遞迴程式中得到了很好的運用。實際上,在許多情況下,所有為了得到乙個非遞迴程式的企圖都會導致採用乙個模擬遞迴棧。不過在有些情況下,不使用這樣的遞迴棧而採用乙個非遞迴程式來完成分而治之演算法也是可能的,並且在這種方式下,程式得到結果的速度會比遞迴方式更快。解決金塊問題的分而治之演算法(例 1 4 - 2)和歸併排序方法(1 4 . 3節)就可以不利用遞迴而通過乙個非遞迴程式來更快地完成。

3.動態規劃

問題的最優解如果可以由子問題的最優解推導得到,則可以先求解子問題的最優解,在構造原問題的最優解;若子問題有較多的重複出現,則可以自底向上從最終子問題向原問題逐步求解.

動態規劃演算法是通過拆分問題,定義問題狀態和狀態之間的關係,使得問題能夠以遞推(或者說分治)的方式去解決。

動態規劃演算法的基本思想與分治法類似,也是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。在求解任一子問題時,列出各種可能的區域性解,通過決策保留那些有可能達到最優的區域性解,丟棄其他區域性解依次解決各子問題,最後乙個子問題就是初始問題的解

演算法與演算法設計的幾大準則

我們設計的演算法肯定是想需要計算機的記憶體或者磁碟空間越少越好,執行這個演算法的指令序列需要的時間越少越好。因此引入2個針對演算法設計提出2個概念就是時間複雜度和空間複雜度 時間複雜度是當前設計的演算法執行完這個指令序列需要的時間。但是不同演算法執行需要的時間我們根據輸入的資料規模會需要不同的時間,...

幾大最短路徑演算法比較

july 二零一一年二月十二日。幾個最短路徑演算法的比較 floyd 求多源 無負權邊的最短路。用矩陣記錄圖。時效性較差,時間複雜度o v 3 floyd warshall演算法 floyd warshall algorithm 是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短...

幾大最短路徑演算法比較

用於解決最短路徑問題的演算法被稱做 最短路徑演算法 有時被簡稱作 路徑演算法 最常用的路徑演算法有 dijkstra演算法 a 演算法 spfa演算法 bellman ford演算法和floyd warshall演算法,本文主要介紹其中的三種。最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖...