c语言五大常用算法,C语言------五大常用算法总结
文章轉(zhuǎn)自:https://blog..net/changyuanchn/article/details/51476281
引言
據(jù)說(shuō)有人歸納了計(jì)算機(jī)的五大常用算法,它們是貪婪算法,動(dòng)態(tài)規(guī)劃算法,分治算法,回溯算法以及分支限界算法。雖然不知道為何要將這五個(gè)算法歸為最常用的算法,但是毫無(wú)疑問(wèn),這五個(gè)算法是有很多應(yīng)用場(chǎng)景的,最優(yōu)化問(wèn)題大多可以利用這些算法解決。算法的本質(zhì)就是解決問(wèn)題。當(dāng)數(shù)據(jù)量比較小時(shí),其實(shí)根本就不需要什么算法,寫(xiě)一些for循環(huán)完全就可以很快速的搞定了,但是當(dāng)數(shù)據(jù)量比較大,場(chǎng)景比較復(fù)雜的時(shí)候,編寫(xiě)for循環(huán)就是一個(gè)很不明智的方式了。一是耗時(shí),二是寫(xiě)出的代碼絕對(duì)是天書(shū)。當(dāng)然還有第三點(diǎn),這點(diǎn)也是最重要的,寫(xiě)代碼是一種藝術(shù),而不是搬磚。前面的文章里對(duì)這五種算法都已經(jīng)做了詳細(xì)的講解和歸納,本文主要是一個(gè)總結(jié),將這五種算法整理到一起來(lái)對(duì)比,分析一下。
0) 窮舉法
窮舉法簡(jiǎn)單粗暴,沒(méi)有什么問(wèn)題是搞不定的,只要你肯花時(shí)間。同時(shí)對(duì)于小數(shù)據(jù)量,窮舉法就是最優(yōu)秀的算法。就像太祖長(zhǎng)拳,簡(jiǎn)單,人人都能會(huì),能解決問(wèn)題,但是與真正的高手過(guò)招,就頹了。
1) 貪婪算法
貪婪算法可以獲取到問(wèn)題的局部最優(yōu)解,不一定能獲取到全局最優(yōu)解,同時(shí)獲取最優(yōu)解的好壞要看貪婪策略的選擇。特點(diǎn)就是簡(jiǎn)單,能獲取到局部最優(yōu)解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪算法,不同的貪婪策略會(huì)導(dǎo)致得到差異非常大的結(jié)果。
具體的詳細(xì)解析請(qǐng)參見(jiàn)下面的文章:
http://blog..net/changyuanchn/article/details/51417211
2) 動(dòng)態(tài)規(guī)劃算法
當(dāng)最優(yōu)化問(wèn)題具有重復(fù)子問(wèn)題和最優(yōu)子結(jié)構(gòu)的時(shí)候,就是動(dòng)態(tài)規(guī)劃出場(chǎng)的時(shí)候了。動(dòng)態(tài)規(guī)劃算法的核心就是提供了一個(gè)memory來(lái)緩存重復(fù)子問(wèn)題的結(jié)果,避免了遞歸的過(guò)程中的大量的重復(fù)計(jì)算。動(dòng)態(tài)規(guī)劃算法的難點(diǎn)在于怎么將問(wèn)題轉(zhuǎn)化為能夠利用動(dòng)態(tài)規(guī)劃算法來(lái)解決。當(dāng)重復(fù)子問(wèn)題的數(shù)目比較小時(shí),動(dòng)態(tài)規(guī)劃的效果也會(huì)很差。如果問(wèn)題存在大量的重復(fù)子問(wèn)題的話,那么動(dòng)態(tài)規(guī)劃對(duì)于效率的提高是非??植赖?。就像斗轉(zhuǎn)星移武功,對(duì)手強(qiáng)它也會(huì)比較強(qiáng),對(duì)手若,他也會(huì)比較弱。
具體的詳細(xì)解析請(qǐng)參見(jiàn)下面的文章:
http://blog..net/changyuanchn/article/details/51420028
http://blog..net/changyuanchn/article/details/51429979
3)分治算法
分治算法的邏輯更簡(jiǎn)單了,就是一個(gè)詞,分而治之。分治算法就是把一個(gè)大的問(wèn)題分為若干個(gè)子問(wèn)題,然后在子問(wèn)題繼續(xù)向下分,一直到base cases,通過(guò)base cases的解決,一步步向上,最終解決最初的大問(wèn)題。分治算法是遞歸的典型應(yīng)用。
具體的詳細(xì)解析請(qǐng)參見(jiàn)下面的文章:
http://blog..net/changyuanchn/article/details/17150109
http://blog..net/changyuanchn/article/details/51465175
4) 回溯算法
回溯算法是深度優(yōu)先策略的典型應(yīng)用,回溯算法就是沿著一條路向下走,如果此路不同了,則回溯到上一個(gè)
分岔路,在選一條路走,一直這樣遞歸下去,直到遍歷萬(wàn)所有的路徑。八皇后問(wèn)題是回溯算法的一個(gè)經(jīng)典問(wèn)題,還有一個(gè)經(jīng)典的應(yīng)用場(chǎng)景就是迷宮問(wèn)題。
具體的詳細(xì)解析請(qǐng)參見(jiàn)下面的文章:
http://blog..net/changyuanchn/article/details/17354461
5) 分支限界算法
回溯算法是深度優(yōu)先,那么分支限界法就是廣度優(yōu)先的一個(gè)經(jīng)典的例子。回溯法一般來(lái)說(shuō)是遍歷整個(gè)解空間,獲取問(wèn)題的所有解,而分支限界法則是獲取一個(gè)解(一般來(lái)說(shuō)要獲取最優(yōu)解)。
具體的詳細(xì)解析請(qǐng)參見(jiàn)下面的文章:
http://blog..net/changyuanchn/article/details/17102037
總結(jié)
以上是生活随笔為你收集整理的c语言五大常用算法,C语言------五大常用算法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ES6之const命令
- 下一篇: [Bugku][Web][CTF] 30