搜索 —— 深搜的剪枝技巧
生活随笔
收集整理的這篇文章主要介紹了
搜索 —— 深搜的剪枝技巧
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
搜索算法的時間復雜度大多是指數級的,難以滿足對程序運行時間的限制要求,為使降低時間復雜度,對深度優先搜索可以進行一種優化的基本方法——剪枝。
搜索的進程可以看做是從樹根出發,遍歷一顆倒置樹(搜索樹)的過程,所謂剪枝,就是通過某些判斷,避免一些不必要的遍歷過程,形象的說,就是減去搜索樹中的某些枝條。
顯而易見,應用剪枝優化的核心問題是設計剪枝判斷方法,即確定哪些枝條舍棄哪些枝條保留,設計出好的剪枝判斷方法,可以使得程序運行時間大大縮短,否則會適得其反。
剪枝的原則:正確、準確、高效
【優化技巧】
1.優化搜索順序
在不同的問題中,搜索樹的各個層次、各個分支之間的順序不是固定的,不同的搜索順序會產生不同的搜索樹形態,其規模大小也相差甚遠。
2.排除等效冗余
在搜索過程中,若能判斷從搜索樹當前節點上沿某幾條不同分支到達的子樹是相同的,那么只需對其中一條分支執行搜索。
3.可行性剪枝
可行性剪枝也叫上下界剪枝,其是指在搜索過程中,及時對當前狀態進行檢查,若發現分支已無法到達遞歸邊界,就執行回溯。
4.最優性剪枝
在最優化問題的搜索過程中,若當前花費的代價已超過當前搜索到的最優解,那么無論采取多么優秀的策略到達遞歸邊界,都不可能更新答案,此時可以停止對當前分支的搜索進行回溯。
【例題】
同題:Backward Digit Sums(POJ-3187):點擊這里
同題:靶形數獨(信息學奧賽一本通-T1447):點擊這里
同題:小木棍(洛谷-P1120 ):點擊這里
總結
以上是生活随笔為你收集整理的搜索 —— 深搜的剪枝技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图论 —— 生成树
- 下一篇: The Brand New Functi