DFS剪枝与优化

本文介绍了DFS算法的优化策略,包括优化搜索顺序、最优性剪枝、可行性剪枝和排除等效冗余。通过实例解析了数独问题,提出了优先填充待选数字最少的格子、利用二进制表示状态以及剪枝等优化方法,以降低时间复杂度和提高解题效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:概述

DFS是我们常用的一种算法,但我们通常会因为它的高复杂度而却步。这时,合理利用剪枝就可以大大提高DFS的速度。

二:常见DFS优化策略

1:优化搜索顺序

        ex:N个人同时过河,每条船载重M,问最少要几条船?

                正常的DFS是大约搜索N^{M},但我们考虑一下搜索顺序,如果我们从重量最大的人开始搜  索,那搜索分支就会减少许多。

2:最优性剪枝

        ex:我们搜索一种状态,搜索出答案为100,但是之前已经搜出了答案为50的状态,那当前这个状态就可以被剪枝。

3:可行性剪枝:

        ex:当前这种状态已经不能再持续下去,则对其剪枝。

4:排除等效冗余:

        ex:有多种情况等效,则剪枝。

三:实战演练:

(一):题目传送门

一般化思路:考虑优化搜索顺序:将小猫质量从最大到最小排序,以此搜索。

最优性剪枝:当前遍历出的船数多于之前所找最优解,则剪枝。

AC代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值