【算法】【殊途同归】搜索算法之(深度优先 || 广度优先) (约束条件 || 限界函数)
生活随笔
收集整理的這篇文章主要介紹了
【算法】【殊途同归】搜索算法之(深度优先 || 广度优先) (约束条件 || 限界函数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于所謂的分支限界法和回溯法,我們完全可以更加靈活,請看表格。
| √ | √ | 回溯法 | 局部判定 | ||
| √ | √ | √ | 分支限界法 | 局部判定 | |
| √ | √ | √ | 加限界的回溯法 | 局部判定 | |
| √ | 枚舉法 | 全局判定 | |||
| √ | 枚舉法 | 全局判定 |
前兩種是我們常見的,但是,事實上,這幾種方式, 怎么玩都行,看實際需求了。
一般來說,剪枝策略使用 約束條件 + 限界函數,然后再配合深度優先或者廣度優先,是最好不過的了,也就是后兩種。
這樣一來,能夠盡可能地剪枝,以提高搜索效率。
而最后兩種枚舉法,則沒有剪枝策略,是一種全局判定方式,是最低效的。
總之,這三種常見的搜索算法,無非就是
- 枚舉策略
- 深度優先
- 廣度優先
- 剪枝策略
- 約束條件
- 限界函數
| 深度優先 | 約束條件 |
| 廣度優先 | 限界函數 |
其中,枚舉策略有且僅有一種,剪枝策略則隨意,然后就有了經典的枚舉法(蠻力法)、回溯法和分支限界法。
搜索算法的學習策略
已經顯而易見了,這4種方式,單獨學明白,懂邏輯,會實現,然后再組合起來使用就OK了。
預測思想:限界函數
限界函數是通過對子樹未來的上界/下界的預測,來評定是否需要繼續生成,方法就是按照平均值排序后,乘以剩余容量。
具體實例可以參考
0/1 knapsack problem using branch and bound
分支限界法-01背包問題
限界函數和約束條件的目標
明確了這兩個目標,就能夠更加針對性選擇了,如果題目求多個可行解,那么就不可能使用限界函數。
總結
以上是生活随笔為你收集整理的【算法】【殊途同归】搜索算法之(深度优先 || 广度优先) (约束条件 || 限界函数)的全部內容,希望文章能夠幫你解決所遇到的問題。