Sparse A*算法的时间复杂度

news2024/10/6 5:55:11

Sparse A*(SAS)算法是A*算法的变型算法,下面将结合A*算法的流程分析SAS的时间复杂度。对于SAS算法而言,其航迹规划的时间 T T T主要由两部分组成:

  • T s T_s Ts:在当前结点扩展可行子结点的时间;

  • T 0 T_0 T0:将产生的子节点插入到合适位置的时间。

    对于时间 T s T_s Ts而言,如下图所示,对该搜索区域构成的近似四棱锥体按纵向等距划分 M M M个扇区,按横向等距划分 S S S个扇区。

    在这里插入图片描述

​ 若每个扇区的结点搜索时间为 Δ T s \Delta T_s ΔTs,假设搜索到最优航迹需要扩展 N N N个结点,那么扩展完 N N N个结点的时间为:
T s = M × S × Δ T s × N T_s=M\times S\times \Delta T_s \times N Ts=M×S×ΔTs×N
​ 对于结点 T 0 T_0 T0而言,其插入时间主要包含两部分,一部分是在 O P E N OPEN OPEN表和 C L O S E D CLOSED CLOSED表中搜索是否存在相同节点的时间 T 1 T_1 T1,另一部分是将子节点按代价大小插入 O P E N OPEN OPEN表中合适位置的时间 T 2 T_2 T2

​ 下面假设 O P E N OPEN OPEN表和 C L O S E D CLOSED CLOSED表的存储结构都是列表。

​ 对于 T 1 T_1 T1而言,在扩展第 i i i个结点时,可以得到当前 C L O S E D CLOSED CLOSED表中有 i i i个结点,而 O P E N OPEN OPEN表中则有 ( M × S ) × i − i + 1 (M\times S)\times i -i + 1 (M×S)×ii+1个结点。

​ 在最坏的时间情况下对于一个结点而言,先搜索 O P E N OPEN OPEN表再搜索 C L O S E D CLOSED CLOSED表,则总共搜索 ( M × S ) × i + 1 (M\times S)\times i + 1 (M×S)×i+1个结点。而对于其 M × S M\times S M×S个结点而言,其平均比较的次数 n 1 n_1 n1为:
n 1 = ( M × S ) × { [ ( M × S ) × i + 1 ] + 1 } / 2 n_1=(M\times S)\times\{[(M\times S)\times i+1]+1\}/2 n1=(M×S)×{[(M×S)×i+1]+1}/2
​ 对于 T 2 T_2 T2而言,在最坏的时间情况下对于一个结点而言,单个子结点插入 O P E N OPEN OPEN表的次数为 ( M × S ) × i − i + 1 (M\times S) \times i - i + 1 (M×S)×ii+1。而对于其 M × S M\times S M×S个结点而言,其平均比较的次数 n 2 n_2 n2为:
n 2 = ( M × S ) × { [ ( M × S ) × i − i + 1 ] + 1 } / 2 n_2=(M\times S) \times \{[(M\times S)\times i - i +1] + 1\}/2 n2=(M×S)×{[(M×S)×ii+1]+1}/2
​ 那么扩展 M × S M\times S M×S个结点的总次数 n ( i ) n( i) n(i)为:
n ( i ) = n 1 + n 2 = ( M S ) 2 i + M S ( 2 − i 2 ) n(i)=n_1+n_2=(MS)^2i+MS(2-\frac{i}{2}) n(i)=n1+n2=(MS)2i+MS(22i)
​ 对于所有的扩展的 N N N个结点而言,可以得到累计的结点计算时间 T 0 T_0 T0
T 0 = ∑ i = 0 N n ( i ) Δ T 0 = [ ( M S ) 2 2 N ( N + 1 ) + M S ( 2 − N 4 ) ( N + 1 ) ] Δ T 0 T_0=\sum_{i=0}^N n(i)\Delta T_0\\=[\frac{(MS)^2}{2}N(N+1)+MS(2-\frac{N}{4})(N+1)]\Delta T_0 T0=i=0Nn(i)ΔT0=[2(MS)2N(N+1)+MS(24N)(N+1)]ΔT0
​ 在上面的情况下,设SAS算法扩展的最小步长为 L min ⁡ L_{\min} Lmin,最小分辨率为 h min ⁡ h_{\min} hmin。下面分析扩展的结点个数 N N N,假设从起点到终点的最优航迹上的点有 l l l个,最理想的情况应当是每次都能得到最优结点,最不理想的情况是每次都得到最坏的结点,这样需要的结点数目约为 min ⁡ { [ X max ⁡ Y max ⁡ Z max ⁡ h min ⁡ 3 ] , ( M S ) l } \min\{[\frac{X_{\max}Y_{\max}Z_{\max}}{h_{\min}^3}],(MS)^l\} min{[hmin3XmaxYmaxZmax],(MS)l},而实际上在时间的探索过程中,当最优航迹上的结点数目 l l l足够大时有 [ X max ⁡ Y max ⁡ Z max ⁡ h min ⁡ 3 ] < < ( M S ) l [\frac{X_{\max}Y_{\max}Z_{\max}}{h_{\min}^3}]<<(MS)^l [hmin3XmaxYmaxZmax]<<(MS)l。在 [ X max ⁡ Y max ⁡ Z max ⁡ h min ⁡ 3 ] [\frac{X_{\max}Y_{\max}Z_{\max}}{h_{\min}^3}] [hmin3XmaxYmaxZmax]个结点的基础上,SAS算法总共每隔 L min ⁡ L_{\min} Lmin的距离最少扩展 L min ⁡ 3 h min ⁡ \frac{L_{\min}}{\sqrt{3}h_{\min}} 3 hminLmin个结点,那么在不考虑结点重复扩展的情况下,每隔 L min ⁡ L_{\min} Lmin的距离 O P E N OPEN OPEN表和 C L O S E D CLOSED CLOSED表中累计扩展的结点数 N N N可以计算为:
N = [ X max ⁡ Y max ⁡ Z max ⁡ h min ⁡ 3 ] / ( L min ⁡ 3 h min ⁡ ) = [ 3 X max ⁡ Y max ⁡ Z max ⁡ h min ⁡ 2 L min ⁡ ] N=[\frac{X_{\max}Y_{\max}Z_{\max}}{h_{\min}^3}]/(\frac{L_{\min}}{\sqrt{3}h_{\min}})\\=[\frac{\sqrt{3}X_{\max}Y_{\max}Z_{\max}}{h_{\min}^2L_{\min}}] N=[hmin3XmaxYmaxZmax]/(3 hminLmin)=[hmin2Lmin3 XmaxYmaxZmax]
在此条件下,可以得到 T s T_s Ts的时间复杂度为 O ( M S N ) O(MSN) O(MSN) T 0 T_0 T0的时间复杂度为 O ( ( M 2 S 2 2 − M S 4 ) N 2 ) O((\frac{M^2S^2}{2}-\frac{MS}{4})N^2) O((2M2S24MS)N2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode每日一题只 快乐数

目录 题目介绍&#xff1a; 算法原理&#xff1a; 鸽巢原理&#xff1a; 如何找到环里元素&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 我先简单举两个例子&#xff…

阿里云重新更新系统导致秘钥失效

报错解决方案&#xff1a; ssh-keygen -f "/Users/pengzhanliang/.ssh/known_hosts" -R "39.105.149.49"这个命令会从~/.ssh/known_hosts文件中移除与IP地址39.105.149.49相关的所有条目 再次尝试连接到远程服务器。这次&#xff0c;SSH将提示您接受新的主…

力扣hot100:239.滑动窗口最大值(优先队列/单调队列)

本题是一个经典的单调队列题。不过用优先队列也能解决。 一、优先队列 在使用优先队列时&#xff0c;我们会遇到这样的问题&#xff1a;如何将一个目标数从优先队列中弹出&#xff1f;如果使用stl这是办不到的&#xff0c;虽然可以自行实现这样的功能。但是我们可以这样思考&am…

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点&#xff0c;生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …

面试问答之Spring进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;说说你对Spring的认识与理解&#x1f415;Bean的分类&#x1f415; BeanFactory 接口和ApplicationContex 接口 的区别&#x1f415;SpringBe…

Text-to-SQL任务中的思维链(Chain-of-thought)探索

导语 在探索LLM在解决Text-to-SQL任务中的潜能时&#xff0c;本文提出了一种创新的‘问题分解’Prompt格式&#xff0c;结合每个子问题的表列信息&#xff0c;实现了与顶尖微调模型&#xff08;RASATPICARD&#xff09;相媲美的性能。 会议&#xff1a;EMNLP 2023链接&#x…

Python给图片加水印

受到“手动给证件加文字太麻烦”的感触&#xff0c;想用Python来实现给图片加水印&#xff0c;这不方便多了。 这里使用PIL模块&#xff1a; from PIL import Image from PIL import ImageFont from PIL import ImageDrawimg_t Image.open(cat.jpg) img_size_t img_t.size…

力扣hot100:560.和为K的子数组(前缀和+哈希表)

分析&#xff1a; 这个题目乍一看&#xff0c;数据大小用暴力解法大概率会超时&#xff0c;可能想用双指针&#xff0c;但是问题出现在 可能存在负数&#xff0c;也就是说即使是找到了一个答案&#xff0c;后面也可能存在负数和正数抵消&#xff0c;又是答案&#xff0c;因此不…

【教程】uni-app iOS打包解决profile文件与私钥证书不匹配问题

摘要 当在uni-app中进行iOS打包时&#xff0c;有时会遇到profile文件与私钥证书不匹配的问题。本文将介绍如何解决这一问题&#xff0c;以及相关的技术细节和操作步骤。 引言 在uni-app开发过程中&#xff0c;iOS打包是一个常见的操作。然而&#xff0c;有时会出现profile文…

Seata 2.x 系列【2】数据库事务

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列Seata 版本 2.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 数据库事务什么是事务事务的作用数据库事务模型显式事…

基于Java springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

linux上的xtrabackup更换版本

linux上安装的xtrabackup版本为8.0版本&#xff0c;与当前库的版本不一致&#xff0c;如何更换xtrabackup的版本 xtrabackup --version xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)如何下载 首先到percona的官网去下…

Excel中怎么求排名

使用Rank函数 1.在需要显示排名的单元格内&#xff0c;输入“RANK&#xff08;数值&#xff0c;数值列表&#xff0c;排序方式&#xff09;” 2.将“数值”替换为需要计算排名的单元格的地址&#xff0c;例如E2单元格。 3.将“数值列表”替换为排名的数值范围&#xff0c;例…

vue接入百度地图获取经纬度

通过城市名称和城市中心经纬度来获取当前所在地图&#xff0c;当前经纬度中心获取可以通过后端获取 静态文件包&#xff0c;替换baidu.html中的ak值&#xff0c;ak值通过百度地图官方网站申请 申请&#xff1a;百度地图API申请步骤 - 知乎 代码示例文件&#xff1a; 链接&a…

【Linux基础(一)】设备和文件IO

学习分享 1、Linux中的设备管理1.1、设备管理的特点1.2、设备分类1.3、设备工作原理1.4、Linux设备操作1.5、系统调用和系统API等区别 2、文件IO2.1、C库的文件操作2.2、文件描述符2.3、特殊文件描述符2.4、系统调用2.4.1、open系统调用4-12.4.2、open系统调用4-22.4.3、write系…

【李沐精读系列】BERT精读

论文&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 参考&#xff1a;BERT论文逐段精读、李沐精读系列、李宏毅版BERT讲解 一、介绍 BERT(Bidirectional EncoderRepresentation Transformer&#xff0c;双向Transformer编码器…

【C++】类与对象(上篇)

一.类的引入 C与C语言比较起来&#xff0c;C引入了一个新的概念&#xff0c;叫做类。那么在C中&#xff0c;类又是什么呢&#xff1f; 在C中&#xff0c;类与C语言中的结构体相似&#xff0c;但不同的是&#xff0c;C中的类中&#xff0c;不仅可以定义变量&#xff0c;还能定义…

时间复杂度考点总结

【2022统考真题】下列程序段的时间复杂度是( )。 int sum0; for(int il;i<n;i*2) for(int j0;j<i;j) sum; 这道题容易错选为C,正确答案是B 解答&#xff1a;i1时循环1次&#xff0c;i2时循环2次&#xff0c;i4时循环4次&#xff0c;所以循环次数…

wy的leetcode刷题记录_Day82

wy的leetcode刷题记录_Day82 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-6 前言 目录 wy的leetcode刷题记录_Day82声明前言2917. 找出数组中的 K-or 值题目介绍思路代码收获 143. 重排链表题目介绍思路代码收获 146. LRU 缓存…

【C/C++】结构体内存对齐 ----- 面试必考(超详细解析,小白一看就懂!!!)

目录 一、前言 二、引出 ---- 结构体内存对齐 &#x1f34e;结构体偏移量计算&#xff1a;offsetof &#x1f95d;结构体内存对齐详解 &#x1f4a6;规则介绍&#xff08;重点&#xff01;&#xff01;&#xff09; &#x1f4a6;例题解析 三、习题演练 &#x1f34d;练习① …