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