【数据结构+算法】迭代深度搜索(IDS)及其时间复杂度和空间复杂度

Content

一、定义

1.迭代深度搜索(IDS)的定义

迭代深度搜索(Iterative Deepening Search, IDS)是一种结合了深度优先搜索(Depth First Search, DFS)和广度优先搜索(Breadth First Search, BFS)优点的搜索策略。它通过逐步增加搜索深度的限制,重复执行DFS,直到找到目标解或达到最大深度。这种方法的优势在于既能节省内存(类似DFS),又能确保找到最短路径(类似BFS)。

2.核心原理

迭代深度搜索从深度限制为1(比如设maxdep=1)开始,执行一次完整的DFS。若未找到目标,将深度限制加1(maxdep++),重新执行DFS。每次迭代都会探索更深的层级,直到目标被发现或资源耗尽。这种方式避免了BFS的高内存消耗,同时解决了DFS可能陷入无限分支的问题。

二、分析

1.时间复杂度

假设最大深度为 d d d,分支因子为 b b b(即每个节点的子节点数),则时间复杂度可分为以下部分:

  1. 深度限制为 k k k 时的搜索

    每次深度限制为 k k k 时,DFS 的时间复杂度为 O ( b k ) O(b^k) O(bk),因为(该深度限制)最多访问 b k b^k bk 个节点。

  2. 总时间复杂度

    IDS 会重复执行深度限制为 1 , 2 , ... , d 1, 2, \dots, d 1,2,...,d 的 DFS,因此总时间为:
    O ( b 1 ) + O ( b 2 ) + ⋯ + O ( b d ) O(b^1) + O(b^2) + \dots + O(b^d) O(b1)+O(b2)+⋯+O(bd)

    这是一个等比数列求和,主导项为最后一层 O ( b d ) O(b^d) O(bd),因此最终时间复杂度为:
    O ( b d ) O(b^d) O(bd)


2.空间复杂度

迭代深度搜索的空间复杂度与深度优先搜索一致,因为每次仅存储当前路径的节点:

  1. 栈空间占用

    每次 DFS 最多存储从根节点到目标节点的路径,路径长度不超过深度限制 d d d,因此空间复杂度为 O ( d ) O(d) O(d)。

  2. 无额外存储

    IDS 不需要像 BFS 那样存储所有已访问节点,仅需维护当前路径的栈。


关键点总结

  • 时间 :与 BFS 相同( O ( b d ) O(b^d) O(bd)),但常数因子较高(因重复搜索浅层节点)。
  • 空间 :与 DFS 相同( O ( d ) O(d) O(d)),远优于 BFS 的 O ( b d ) O(b^d) O(bd)。
  • 优势:在空间受限时,IDS 是 BFS 的替代方案,保证最优解(针对无权图)。

伪代码及注释

python 复制代码
def IDS(root, target):
    depth = 0
    while True: #循环调用DLS
        found = DLS(root, target, depth)
        if found is not None: #目标节点一旦找到赶紧返回
            return found 
        depth += 1 #每次迭代深度+1实现广度优先的深度扩展

def DLS(node, target, depth):
    if depth == 0 and node == target: #当达到指定深度且节点匹配时返回目标
        return node
    if depth > 0:
        for child in node.children:
            found = DLS(child, target, depth - 1)#在深度允许范围内递归搜索子节点
            if found is not None:
                return found
    return None

"""

关于时间复杂度和空间复杂度(整理自baike.baidu.com

算法的复杂性体运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。

为了计算时间复杂度,通常会估计算法的操作单元数量,每个单元运行的时间都是相同的。相同大小的不同输入值仍可能造成算法的运行时间不同,因此我们通常使用算法的最坏情况复杂度,记为T(n),定义为任何大小的输入n所需的最大运行时间。

一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1)。

空间复杂度是衡量算法在运行过程中所需内存空间的大小,通常用 S(n) 表示。它反映了算法在处理数据时占用内存的增长趋势,常见的空间复杂度有:

• O(1):表示使用的空间是常量,不随输入规模变化。

• O(n):表示使用的空间与输入规模成线性关系。

• O(n²):表示使用的空间与输入规模的平方成正比。

空间复杂度的计算包括输入空间、暂存空间和输出空间等。

"""

三、算法步骤

  1. 初始化深度限制 :设置初始深度限制 d = 1
  2. 执行深度受限DFS :在深度限制 d 内进行DFS,若找到目标则终止。
  3. 递增深度 :若未找到目标,将 d 增加1,重复步骤2。

伪代码示例:

python 复制代码
def iterative_deepening_search(start, goal):
    depth = 1
    while True:#外层循环通过逐步增加深度限制(depth)进行迭代
        result = depth_limited_search(start, goal, depth)#内层调用深度受限搜索(DLS)执行实际搜索
        if result != "Not Found":
            return result
        depth += 1

适用场景

  • 路径搜索问题:如迷宫求解、棋类游戏走法计算。
  • 资源受限环境:内存有限但需保证最优解的场景。
  • 无限状态空间:避免DFS陷入无限分支。

优缺点对比

优点

  • 内存效率高,仅需存储当前路径(类似DFS)。
  • 保证找到最短路径(类似BFS)。

缺点

  • 重复搜索浅层节点,可能增加时间开销。
  • 不适用于已知目标较深的场景。

通过结合DFS和BFS的特性,迭代深度搜索在实践中有广泛的应用价值。

相关推荐
Font Tian13 小时前
GPT-oss + vLLM + LobalChat
人工智能·gpt·llm
Moniane13 小时前
FastGPT 与 MCP 协议概述
算法
weixin_466814 小时前
Python编程之面向对象
开发语言·人工智能·python
连线Insight14 小时前
竞逐AI内容,爱奇艺先出手了
大数据·人工智能
草莓工作室14 小时前
数据结构7:栈和队列
c语言·数据结构
Meteor_cyx14 小时前
Day12 二叉树遍历
算法
杭州泽沃电子科技有限公司14 小时前
钢铁厂运输设备在线监测:构建智能工厂的安全与效率基石
运维·人工智能·智能监测
董厂长14 小时前
阅读:REACT: SYNERGIZING REASONING AND ACTING INLANGUAGE MODELS(在语言模型中协同推理与行动)
人工智能·语言模型·agent·react
技术闲聊DD14 小时前
深度学习(5)-PyTorch 张量详细介绍
人工智能·pytorch·深度学习
加藤不太惠14 小时前
十大排序其六
算法·排序算法