五大常用演算法總結

2021-09-27 07:10:11 字數 1251 閱讀 3152

據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質就是解決問題。當資料量比較小時,其實根本就不需要什麼演算法,寫一些for迴圈完全就可以很快速的搞定了,但是當資料量比較大,場景比較複雜的時候,編寫for迴圈就是乙個很不明智的方式了。一是耗時,二是寫出的**絕對是天書。當然還有第三點,這點也是最重要的,寫**是一種藝術,而不是搬磚。前面的文章裡對這五種演算法都已經做了詳細的講解和歸納,本文主要是乙個總結,將這五種演算法整理到一起來對比,分析一下。

窮舉法簡單粗暴,沒有什麼問題是搞不定的,只要你肯花時間。同時對於小資料量,窮舉法就是最優秀的演算法。就像太祖長拳,簡單,人人都能會,能解決問題,但是與真正的高手過招,就頹了。

貪婪演算法可以獲取到問題的區域性最優解,不一定能獲取到全域性最優解,同時獲取最優解的好壞要看貪婪策略的選擇。特點就是簡單,能獲取到區域性最優解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪演算法,不同的貪婪策略會導致得到差異非常大的結果。

具體的詳細解析請參見下面的文章:

當最優化問題具有重複子問題和最優子結構的時候,就是動態規劃出場的時候了。動態規劃演算法的核心就是提供了乙個memory來快取重複子問題的結果,避免了遞迴的過程中的大量的重複計算。動態規劃演算法的難點在於怎麼將問題轉化為能夠利用動態規劃演算法來解決。當重複子問題的數目比較小時,動態規劃的效果也會很差。如果問題存在大量的重複子問題的話,那麼動態規劃對於效率的提高是非常恐怖的。就像斗轉星移武功,對手強它也會比較強,對手若,他也會比較弱。

具體的詳細解析請參見下面的文章:

分治演算法的邏輯更簡單了,就是乙個詞,分而治之。分治演算法就是把乙個大的問題分為若干個子問題,然後在子問題繼續向下分,一直到base cases,通過base cases的解決,一步步向上,最終解決最初的大問題。分治演算法是遞迴的典型應用。

具體的詳細解析請參見下面的文章:

回溯演算法是深度優先策略的典型應用,回溯演算法就是沿著一條路向下走,如果此路不同了,則回溯到上乙個

分岔路,在選一條路走,一直這樣遞迴下去,直到遍歷萬所有的路徑。八皇后問題是回溯演算法的乙個經典問題,還有乙個經典的應用場景就是迷宮問題。

具體的詳細解析請參見下面的文章:

回溯演算法是深度優先,那麼分支限界法就是廣度優先的乙個經典的例子。回溯法一般來說是遍歷整個解空間,獲取問題的所有解,而分支限界法則是獲取乙個解(一般來說要獲取最優解)。

具體的詳細解析請參見下面的文章:

五大常用演算法總結

據說有人歸納了計算機的五大常用演算法,它們是貪婪演算法,動態規劃演算法,分治演算法,回溯演算法以及分支限界演算法。雖然不知道為何要將這五個演算法歸為最常用的演算法,但是毫無疑問,這五個演算法是有很多應用場景的,最優化問題大多可以利用這些演算法解決。演算法的本質就是解決問題。當資料量比較小時,其實根本...

五大常用演算法

主要是演算法演算法的複雜度 1.分治法 話說遞迴與hanoi塔 二分法求方程近似解 用c 實現合併排序 求最大值和最小值的分治演算法 2.動態規劃法 動態規劃求0 1揹包問題 最長公共子串問題的實現 用動態規劃實現飛彈攔截 最大化投資回報問題的實現 3.貪心演算法 最小生成樹之prim演算法 最小生...

常用的五大演算法

貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。用貪心法設計演算法的特點是一...