0x23 剪枝

0x23 剪枝

剪枝,就是减少搜索树规模,尽早排除搜索树中不必要的分支的一种手段。形象地看,就好像剪掉了搜索树的枝条,故被称为"剪枝"。在深度优先搜索中,有以下几类常见的剪枝方法:

1.优化搜索顺序

在一些搜索问题中,搜索树的各个层次、各个分支之间的顺序不是固定的。不同的搜索顺序会产生不同的搜索树形态,其规模大小也相差甚远。例如:在数独问题中,优先搜索"能填的合法数字最少的位置。

2.排除等效冗余

在搜索过程中,如果我们能够判定从搜索树的当前节点上沿着某几条不同分支到达的子树是等效的,那么只需要对其中的一条分支执行搜索。

初学者一定要避免重叠、混淆"层次"与"分支",避免遍历若干颗覆盖同一状态空间的等效搜索树。

3.可行性剪枝

在搜索过程中,及时对当前状态进行检查,如果发现分支已经无法到达递归边界,就执行回溯。这就好比我们在道路上行走时,远远看到前方是一个死胡同,就应该立即折返绕路,而不是走到路的尽头再返回。

某些题目条件的范围限制是一个区间,此时可行性剪枝也被称为"上下界剪枝"。

4.最优性剪枝

在最优化问题的搜索过程中,如果当前花费的代价超过了当前搜索到的最优解,那么无论采取多么优秀的策略到达递归边界,都不可能更新答案。此时可以停止对当前分支的搜索,执行回溯。

5.记忆化

可以记录每个状态的搜索结果,在重复遍历一个状态时直接检索并返回。这就好比我们对图进行深度优先遍历时,标记一个节点是否已经被访问过。

相关推荐
方方洛5 小时前
vllm教程-00-前言与导读
人工智能·算法·vllm
IT毕设实战小研5 小时前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
且随疾风前行.6 小时前
从驱动来分析服务的添加过程
算法
CoderYanger6 小时前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试
xiaokcehui7 小时前
地球物理大地测量学计算系列之十七局部重力场SRBF逼近及其性能指标测评
人工智能·算法·机器学习
Navigator_Z7 小时前
LeetCode //C - 1221. Split a String in Balanced Strings
c语言·算法·leetcode
天疆说8 小时前
庞特里亚金极小值原理的详细推导
算法
余俊晖8 小时前
Self-OPD:去掉教师机的流匹配模型 On-Policy 蒸馏
人工智能·算法·机器学习
手写码匠8 小时前
华为云Flexus+DeepSeek征文|华为云MaaS DeepSeek推理服务 × Flexus云服务器 × Dify一键部署:性能评测实战
人工智能·深度学习·算法·aigc
啥都想学点的研究生9 小时前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归