日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言五大常用算法,C语言------五大常用算法总结

發(fā)布時(shí)間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言五大常用算法,C语言------五大常用算法总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章轉(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。