0
点赞
收藏
分享

微信扫一扫

【深度优先搜索笔记】DFS常用剪枝策略

小沙坨 2022-02-12 阅读 63
深度优先

可行性剪枝:

通过一些判断,砍掉搜索树上不必要的子树。

有时候,如果发现某个结点对应子树的状态不是我们想要的结果,那么没必要对这个分支进行搜索,砍掉这个子树,就是剪枝。

例:

n个数选k个数和为sum,如果发现当前和大于sum,那么之和不管怎么选和值都不可能是sum了

或者 如果选出数的个数大于k,那么之后不管怎么选数个数都大于k,

我们可以直接终止分支的搜索。

最优性剪枝:

在求解最优解的一类问题,通常可以用最优性剪枝

例1:

求解迷宫最短路时,如果发现当前的步数已经超过了当前最优解,那么从当前状态开始的搜索都是多余的,因为这样搜索下去永远得不到更优的解。通过这样的剪枝,可以省去大量冗余的计算

例2:

搜索是否有可行解的过程中,一旦找到了一组可行解,后面所有的搜索都不必再进行了。

重复性剪枝:

bool类型数组vis防止选重复的节点


 

举报

相关推荐

0 条评论