Depth-First深度优先、Breadth-First广度优先、Iterative Deepening迭代深入、Uniform Cost代价一致搜索算法的规则及基于n叉树的时间复杂度空间复杂度比较

本文主要是介绍Depth-First深度优先、Breadth-First广度优先、Iterative Deepening迭代深入、Uniform Cost代价一致搜索算法的规则及基于n叉树的时间复杂度空间复杂度比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Depth-First深度优先、Breadth-First广度优先、Iterative Deepening迭代深入、Uniform Cost代价一致搜索算法

分为两部分介绍:

  1. 四种算法的遍历规则
  2. 基于n叉树的时间复杂度与空间复杂度比较
四种算法的遍历规则

使用下图案例来比较四种算法的遍历规则:
在这里插入图片描述

1. Depth-First Search 深度优先算法

策略:优先遍历最深节点
实现:存贮邻接点使用LIFO stack后进先出的栈

2. Breadth-First Search 广度优先算法

策略:优先遍历最浅的一层节点,从上自下,一层层遍历
实现:存贮邻接点使用FIFO queue先入先出数列

在这里插入图片描述在这里插入图片描述
3. Iterative Deepening迭代加深算法

限制一个深度d1用深度优先算法遍历,如果没有目标
限制一个深度d2用深度优先算法遍历,如果没有目标
限制一个深度d3…

在这里插入图片描述在这里插入图片描述
4. Uniform Cost Search代价一致算法

策略:确定邻接节点的集合,从中选取,优先添加花费最小的节点(注意图三优先选取邻接节点中最小的e,即使目标节点已经邻接表中,图四不同颜色表示邻接节点集合范围)
实现:存贮邻接点使用Priority queue优先级数列(优先级为:累计成本)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
基于n叉树的时间复杂度与空间复杂度比较

用下图b叉树来比较四种算法的时间复杂度与空间复杂度(b是子节点个数,m是b叉树的层数,总的节点数: 1 + b + b 2 1+b+b^2 1+b+b2+… + b m +b^m +bm = O ( b m ) =O(b^m) =O(bm)
在这里插入图片描述

1. Depth-First Search 深度优先算法

时间复杂度:O( b m b^m bm),考虑最坏情况目标在树的右下角,所以需要遍历所有节点
在这里插入图片描述
空间复杂度:O(bm),空间复杂度也就是存贮邻接点的大小,LIFO stack后进先出的栈的容量,考虑最坏情况如图遍历到m层每一层需要存贮相邻的b个节点,故节点个数为bm
在这里插入图片描述

2. Breadth-First Search 广度优先算法

时间复杂度: O ( b s ) O(b^s) O(bs),引入新变量s,即达到目标的最浅层数,故时间复杂度为遍历目标节点前的所有节点 b s b^s bs
在这里插入图片描述
空间复杂度: O ( b s ) O(b^s) O(bs),邻接节点即每一层,考虑最坏情况在s层时,节点个数为 b s b^s bs
在这里插入图片描述

3. Iterative Deepening迭代加深算法

时间复杂度:O ( b s ) (b^s) (bs),同广度优先算法
空间复杂度: O ( b ∗ s ) O(b*s) O(bs),同深度优先算法,但最差情况由第m层变为找到目标的s层
同时汲取了深度优先算法的空间复杂度优势,及广度优先算法的时间shallow-solution较浅情况优势
在这里插入图片描述

4. Uniform Cost Search代价一致算法

时间复杂度:在这里插入图片描述,C是代价, C ∗ C* C是代价的最优值, ϵ \epsilon ϵ指每一步代价至少为,有效深度(effective depth)大约为层C*/ ϵ \epsilon ϵ
空间复杂度:在这里插入图片描述

在这里插入图片描述在这里插入图片描述

这篇关于Depth-First深度优先、Breadth-First广度优先、Iterative Deepening迭代深入、Uniform Cost代价一致搜索算法的规则及基于n叉树的时间复杂度空间复杂度比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270551

相关文章

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查