1. 程式人生 > >五大常用演算法總結

五大常用演算法總結

引言

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

0) 窮舉法

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

1) 貪婪演算法

貪婪演算法可以獲取到問題的區域性最優解,不一定能獲取到全域性最優解,同時獲取最優解的好壞要看貪婪策略的選擇。特點就是簡單,能獲取到區域性最優解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪演算法,不同的貪婪策略會導致得到差異非常大的結果。 
具體的詳細解析請參見下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/51417211

2) 動態規劃演算法

當最優化問題具有重複子問題和最優子結構的時候,就是動態規劃出場的時候了。動態規劃演算法的核心就是提供了一個memory來快取重複子問題的結果,避免了遞迴的過程中的大量的重複計算。動態規劃演算法的難點在於怎麼將問題轉化為能夠利用動態規劃演算法來解決。當重複子問題的數目比較小時,動態規劃的效果也會很差。如果問題存在大量的重複子問題的話,那麼動態規劃對於效率的提高是非常恐怖的。就像斗轉星移武功,對手強它也會比較強,對手若,他也會比較弱。 
具體的詳細解析請參見下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/51420028 
http://blog.csdn.net/changyuanchn/article/details/51429979

3)分治演算法

4) 回溯演算法

回溯演算法是深度優先策略的典型應用,回溯演算法就是沿著一條路向下走,如果此路不同了,則回溯到上一個 
分岔路,在選一條路走,一直這樣遞迴下去,直到遍歷萬所有的路徑。八皇后問題是回溯演算法的一個經典問題,還有一個經典的應用場景就是迷宮問題。 
具體的詳細解析請參見下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/17354461

5) 分支限界演算法

回溯演算法是深度優先,那麼分支限界法就是廣度優先的一個經典的例子。回溯法一般來說是遍歷整個解空間,獲取問題的所有解,而分支限界法則是獲取一個解(一般來說要獲取最優解)。 
具體的詳細解析請參見下面的文章: 
http://blog.csdn.net/changyuanchn/article/details/17102037

謝謝原作者,學到了,學到了

相關推薦

C語言------五大常用演算法總結

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

資料結構與演算法- 五大常用演算法總結(分治法,回溯法,分治限界法,貪心演算法,動態規劃法)

1.分治法(Recurrence and Divide-Conquer)        對於一個規模為n的問題,若該問題可以容易解決(比如說規模n較小)則直接解決,否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解決這些子問

五大常用演算法總結

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

溫故知新——五大常用演算法總結

分治演算法 一、基本概念 分治法是一種很重要的演算法。字面上的解釋是“分而治之”,就是把一個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效演算

演算法設計之五大常用演算法設計方法總結

演算法設計之五大常用演算法設計方法總結 一、【分治法】  在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是“分而治之”,就是把一個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個

【帶你裝逼帶你飛】吐血總結了這五大常用演算法技巧,讓你在同事/面試官面前驚豔全場!

對於演算法技巧,之前的文章也寫過一些演算法技巧,不過相對零散一些,今天我把之前的很多文章總結了下,並且通過增刪查改,給大家總結一些常用的演算法解題技巧,當然,這些也不是多牛逼的技巧,不過可以讓你的程式碼看起來更加短小精悍,如果你能夠充分掌握這些技巧,能夠混合運用起來,那麼寫出來的程式碼,必然可以讓別人拍案叫絕

程式設計思想 - 五大常用演算法詳解

https://www.cnblogs.com/brucemengbm/p/6875340.html https://blog.csdn.net/changyuanchn/article/details/51476281 https://www.cnblogs.com/chuninggao/p/

常用演算法總結

排序演算法幾種分類方式: 1,穩定排序和不穩定排序       如果a==b, 當排序之前a在b的前面,排序後,a仍然在b的前面,則該排序演算法為穩定排序演算法。否則為不穩定排序演算法。 2,非線性時間比較類排序和線性時間非比較類排序演算法       非線性時間

五大常用演算法的簡單介紹

1、遞迴與分治 遞迴演算法:直接或者間接不斷反覆呼叫自身來達到解決問題的方法。這就要求原始問題可以分解成相同問題的子問題。 示例:階乘、斐波納契數列、漢諾塔問題 斐波納契數列:又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,斐

五大常用演算法彙總

1、五大常用演算法之一:分治演算法:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html 2、五大常用演算法之二:動態規劃演算法:http://www.cnblogs.com/steven_oyj/archive/20

演算法入門——五大常用演算法

1、遞迴與分治 遞迴演算法:直接或者間接不斷反覆呼叫自身來達到解決問題的方法。這就要求原始問題可以分解成相同問題的子問題。 示例:階乘、斐波納契數列、漢諾塔問題   斐波納契數列:又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,斐

五大常用演算法——貪心演算法詳解及經典例子

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

機器學習中常用演算法總結

參考:http://www.shuju.net/article/MDAwMDAyM4DM0.html 在垃圾郵件分類器專案中,隨機森林被用作最終的分類器模型。面試官可能會就此提出以下問題:為什麼選擇隨機森林而非其他模型,比如樸素貝葉斯或者支援向量機。一般來說,面試者可以從數

五大常用演算法之分支定界法

看了五大常用演算法之一這篇博文,感覺理解了很多,可是純粹都是理論,缺少一些示例,所以準備綜合一篇博文,以幫助自己記憶,原文: http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html 一、基本描述

資料結構與演算法-5大常用演算法總結

1.貪心演算法 基本思想:貪心演算法分階段工作,在每一階段,可以認為所做的決定是好的,而不考慮將來的後果。意味著選擇的是區域性最優,如果剛好是全域性最優則演算法正確,否則得到的是一個次優解。所有可以應用於不需要得到最佳答案,用貪心演算法生成近似答案。 1

面試常用演算法總結——排序演算法(java版)

排序演算法 重要性不言而喻,很多演算法問題往往選擇一個好的排序演算法往往問題可以迎刃而解 1、冒泡演算法 氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數

五大常用演算法一(回溯,隨機化,動態規劃)

蒙特卡洛演算法 首先要講一下,隨機化演算法之間並不是涇渭分明的,像之前隨機投點法求π也算蒙特卡洛演算法,只有蒙特卡洛演算法與拉斯維加斯演算法有著比較明顯的區別,前者是以高概率給出正確解,但無法確定那個是不是正確解.後者是給出的解一定是正確的,但可能給不出...夠明顯的區別了吧... 基本思想:當所要求解

機器學習常用演算法總結

機器學習無疑是當前資料分析領域的一個熱點內容。很多人在平時的工作中都或多或少會用到機器學習的演算法。本文總結一下常見的機器學習演算法,以供參考。機器學習的演算法很多,很多演算法是一類演算法,而有些演算法又是從其他演算法中延伸出來的。這裡從兩個方面進行總結,第一個方面是學習的

五大常用演算法之五:分支限界法

分支限界法 一、基本描述     類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解

五大常用演算法:分支限界法

一、基本描述 類似於回溯法,也是一種在問題的解空間樹 T 上搜索問題解的演算法,但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是則是找出滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使