当前位置: 首页 > news >正文

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

Content

    • 一、定义
      • 1.迭代深度搜索(IDS)的定义
      • 2.核心原理
    • 二、分析
      • 1.时间复杂度
      • 2.空间复杂度
      • 关键点总结
      • 伪代码及注释
    • 三、算法步骤
      • 适用场景
      • 优缺点对比

一、定义

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.时间复杂度

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

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

  2. 总时间复杂度
    IDS 会重复执行深度限制为 1,2,…,d1, 2, \dots, d1,2,,d 的 DFS,因此总时间为:
    O(b1)+O(b2)+⋯+O(bd)O(b^1) + O(b^2) + \dots + O(b^d)O(b1)+O(b2)++O(bd)
    这是一个等比数列求和,主导项为最后一层 O(bd)O(b^d)O(bd),因此最终时间复杂度为:
    O(bd)O(b^d)O(bd)


2.空间复杂度

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

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

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


关键点总结

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

伪代码及注释

def IDS(root, target):depth = 0while True: #循环调用DLSfound = 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 nodeif depth > 0:for child in node.children:found = DLS(child, target, depth - 1)#在深度允许范围内递归搜索子节点if found is not None:return foundreturn 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。

伪代码示例:

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

适用场景

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

优缺点对比

优点

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

缺点

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

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

http://www.dtcms.com/a/423644.html

相关文章:

  • OpenSpeedy下载 - 全平台网盘提速加速工具|官网入口
  • 关于在博客页面添加live2d-widget的一些心得和踩过的坑
  • 2025年,今后需要进步的方面
  • 有哪些做平面设计好素材网站自学it怎么入门
  • Android16 adb投屏工具Scrcpy介绍
  • 酵母展示技术如何重塑酶工程?从定向进化到工业催化的突破
  • 广汉做网站立白内部网站
  • 【FPGA+DSP系列】——(3)中断学习(以定时器中断为例)
  • 重庆网上注册公司网站配置 wordpress
  • ECMAScript 2025 有哪些新特性?
  • CSP-S 提高组 2025 初赛试题解析(第三部分:完善程序题(二)(39-43))
  • 前端实战:基于React Hooks与Ant Design V5的多级菜单系统
  • 单片机OTA升级:高效无线更新的秘密
  • 社区平安建设基层网站重庆企业网站建设官网
  • 嵌入式学习笔记4.STM32中断系统及外部中断EXTI
  • 手机网站模板大全上海市公共招聘网官网
  • Python爬虫实战:获取国家天文数据中心公开的观测信息与数据分析
  • 中核西北建设集团网站苏州手机社区网站建设
  • 网站建设皿金手指谷哥壹柒小米发布会2022
  • 实战:用Scrapy框架搭建第一个爬虫项目
  • Kubernetes 的本质:一个以 API 为中心的“元操作系统”
  • 网站设计的公司选哪家陕西建设网官网登录
  • 基于EasyExcel、FastExcel封装spring boot starter
  • Arpg第五节——方法
  • 太原网站搭建推广服装设计网站模板下载
  • 人工智能-机器学习day3
  • 第四部分:VTK常用类详解(第113章 vtkTensorGlyph张量符号化类)
  • 中国平安官方网站心态建设课件做网站的学校
  • 翻译插件分享
  • 网页设计广州网站购物型网站用dw做