0x24 迭代加深

0x24 迭代加深

1.迭代加深

深度优先搜索每次选定一个分支,不断深入,直至到达递归边界才回溯。这种策略带有一定的缺陷。试想以下情况:搜索树每个节点的分支数目非常多,并且问题的答案在某个较浅的节点上。如果深搜在一开始就选错了分支,就很可能在不包含答案的深层子树上浪费许多时间。

此时,我们可以从小到大限制搜索的深度,如果在当前深度限制下搜不到答案,就把深度限制增加,重新进行一次搜索,这就是迭代加深的思想。所谓“迭代”,就是以上一次的结果为基础,重新执行以逼近答案的意思。迭代加深 D F S DFS DFS的过程如下:

在这里插入图片描述

虽然该过程在深度限制为 d d d时,会重复搜索第 1 ∼ d − 1 1\sim d-1 1d1层的节点,但是当搜索树节点分支数目较多时,随着层数的深入,每层节点数会呈指数级增长,这点重复搜索与深层子树的规模相比,实在是小巫见大巫了。

总而言之,当搜索树规模随着层次的深入增长很快,并且我们能够确保答案在一个较浅层的节点时,就可以采用迭代加深的深度优先搜索算法来解决问题。

2.双向搜索

除了迭代加深之外,双向搜索也可以避免在深层子树上浪费时间。在一些题目上,问题不但有“初态”,还具有明确的“终态”,并且从初态开始搜索与从终态开始逆向搜索产生的搜索树都能覆盖这个状态空间。在这种情况下,就可以采用双向搜索——从初态到终态出发各搜索一半状态,产生两颗深度减半的搜索树,在中间交会、组合成最终的答案

如下图所示,左侧是直接进行一次搜索产生的搜索树,右侧是双向搜索产生的两颗搜索树,避免了层数过深时分支数量的大规模增长。

在这里插入图片描述

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷神星ceres

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值