DFS优化

本文介绍了DFS在解决复杂问题时的效率优化方法,包括范围剪枝、最优化剪枝、记忆化搜索和可行性剪枝。范围剪枝通过限制搜索范围避免TLE;最优化剪枝在过程中判断当前方案是否最优;记忆化搜索利用动态规划思想减少重复计算;记忆化递归斐波那契数列展示了这一思想的应用;可行性剪枝在搜索过程中提前排除不可能正确的方案。
摘要由CSDN通过智能技术生成

DFS是常用的暴力方法,但由于其O(n!)的效率,有时难以通过较多数据点,所以需对其进行剪枝。


范围剪枝:

(一种可行性剪枝,拉出来单独讲)
有时DFS的范围较大会导致TLE,这时需根据题意缩小搜索的范围。例如:需要搜索一个n位数,但需要其低位数字保证比高位数字大。例如12345是合法的,但12354是不合法的。
比较差的思想是先做一遍全排列,如果已经做完一遍,再判断这个排列是否满足条件。
优化:每层dfs记录上一层已经使用的最大数字,从这个数字+1开始枚举数字即可。


最优化剪枝:

有时需要求一个最优化方案(最大啊,最小啊),这个时候如果求出所有方案,一一判断是否最优,这种方案是很差的。
所以,我们可以在DFS中间加入最优化判断:如果目前的方案已经比之前求出方案差了,那么直接return,抛弃这种方案。
如果这种剪枝与一种尽量让方案更早获得最优解的操作结合,将会更快输出结果。


记忆化搜索:

采用动态规划思想,将DFS的中间值保存,就可以不再重复计算。
例如递归求一个斐波那契数列,如果直接求解,F(n)的结果会计算多次,但如果保存了F(n)的结果,则可以保证每个F(n)只计算一次,不会发生爆时间的惨剧。(斐波那契数列只是递归ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值