浅谈剪枝

剪枝的概念

我们知道,所谓深搜和广搜(宽搜),其本质上都是对一棵搜索树的深度、广度优先遍历。无论是图论类型的题目,还是正常的传统性题目都是如此。把握这个性质也是我们设计搜索算法时最重要的思路。
而在这个过程中,有些子节点是明显不符合题意的,所以我们就可以在此基础上对算法进行优化,省去很多冗余的环节。
因为这个优化的技巧非常像在树上砍冗余的枝条,所以起了一个名字叫做:剪枝。

剪枝的分类

1、可行性剪枝

所谓可行性剪枝,顾名思义,就是当当前状态和题意不符,并且由于题目可以推出,往后的所有情况和题意都不符,那么就可以进行剪枝,直接把这种情况及后续的所有情况判负,直接返回。

即:不可行,就返回。

2、排除等效冗余

所谓排除等效冗余,就是当几个枝桠具有完全相同的效果的时候,只选择其中一个走就可以了。

即:都可以,选一个。

3、最优性剪枝

所谓最优性剪枝,是在我们用搜索方法解决最优化问题的时候的一种常用剪枝。就是当你搜到一半的时候,已经比已经搜到的最优解要不优了,那么这个方案肯定是不行的,即刻停止搜索,进行回溯。

即:有比较,选最优。

4、顺序剪枝

普遍来讲,搜索的顺序是不固定的,对一个问题来讲,算法可以进入搜索树的任意的一个子节点。但假如我们要搜索一个最小值,而非要从最大值存在的那个节点开搜,就可能存在搜索到最后才出解。而我们从最小的节点开搜很可能马上就出解。这就是顺序剪枝的一个应用。一般来讲,有单调性存在的搜索问题可以和贪心思想结合,进行顺序剪枝。

即:有顺序,按题意。

5、记忆化

记忆化搜索其实是搜索的另外一个分支。在这里简单介绍一下记忆化的原理:

就是记录搜索的每一个状态,当重复搜索到相同的状态的时候直接返回。

即:搜重了,直接跳。

这些是剪枝的大的方向,在实际的题目中我们要根据题目灵活分析。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值