常用的算法设计策略有哪些
常見的算法設(shè)計(jì)策略:
1、分治
分治法的設(shè)計(jì)思想是,將一個(gè)難以直接解決的大問題,分割成k個(gè)規(guī)模較小的子問題,這些子問題相互獨(dú)立,且與原問題相同,然后各個(gè)擊破,分而治之。
分治法常常與遞歸結(jié)合使用:通過反復(fù)應(yīng)用分治,可以使子問題與原問題類型一致而規(guī)模不斷縮小,最終使子問題縮小到很容易求出其解,由此自然導(dǎo)致遞歸算法。
2、動(dòng)態(tài)規(guī)劃
動(dòng)態(tài)規(guī)劃法與分治法類似,其基本思想也是將原問題分解成若干個(gè)子問題。與分治法不同的是,其分解出的子問題往往不是相互獨(dú)立的。這種情況下若用分治法會(huì)對(duì)一些子問題進(jìn)行多次求解,這顯然是不必要的。動(dòng)態(tài)規(guī)劃法在求解過程中把所有已解決的子問題的答案保存起來,從而避免對(duì)子問題重復(fù)求解。
動(dòng)態(tài)規(guī)劃常用于解決最優(yōu)化問題。對(duì)一個(gè)最優(yōu)化問題可否應(yīng)用動(dòng)態(tài)規(guī)劃法,取決于該問題是否具有如下兩個(gè)性質(zhì):
最優(yōu)子結(jié)構(gòu)性質(zhì):
當(dāng)問題的最優(yōu)解包含其子問題的最優(yōu)解時(shí),稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。
子問題重疊性質(zhì):
子問題重疊性質(zhì)是指由原問題分解出的子問題不是相互獨(dú)立的,存在重疊現(xiàn)象。
3、貪心
當(dāng)一個(gè)問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)時(shí),可用動(dòng)態(tài)規(guī)劃法求解。但有時(shí)會(huì)有比動(dòng)態(tài)規(guī)劃更簡(jiǎn)單更直接效率更高的算法——貪心法。貪心法總是做出在當(dāng)前看來最好的選擇,也就是說貪心法并不從整體最優(yōu)考慮,它所做出的選擇只是在某種意義上的局部最優(yōu)選擇。
4、回溯
回溯法是對(duì)問題的解空間樹進(jìn)行深度優(yōu)先搜索 ,但是在對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行DFS之前,要先判斷該節(jié)點(diǎn)是否有可能包含問題的解。如果肯定不包含,則跳過對(duì)以該節(jié)點(diǎn)為根的子樹的搜索,逐層向其祖先節(jié)點(diǎn)回溯。如果有可能包含,則進(jìn)入該子樹,進(jìn)行DFS。
5、分支限界
分支限界法的搜索策略是,在當(dāng)前節(jié)點(diǎn)處,先生成其所有的子節(jié)點(diǎn)(分支),并為每個(gè)滿足約束條件的子節(jié)點(diǎn)計(jì)算一個(gè)函數(shù)值(限界),再將滿足約束條件的子節(jié)點(diǎn)全部加入解空間樹的活結(jié)點(diǎn)優(yōu)先隊(duì)列。然后再?gòu)漠?dāng)前的活節(jié)點(diǎn)優(yōu)先隊(duì)列中選擇優(yōu)先級(jí)最大的節(jié)點(diǎn)(節(jié)點(diǎn)的優(yōu)先級(jí)由其限界函數(shù)的值來確定) 作為新的當(dāng)前節(jié)點(diǎn)。重復(fù)這一過程,直到到達(dá)一個(gè)葉節(jié)點(diǎn)為止。所到達(dá)的葉節(jié)點(diǎn)就是最優(yōu)解。
以上就是常用的算法設(shè)計(jì)策略有哪些的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注風(fēng)君子博客其它相關(guān)文章!
總結(jié)
以上是生活随笔為你收集整理的常用的算法设计策略有哪些的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python axis 0_Python
- 下一篇: 三维软件 Blender 获 AI 支持