Sparse A*算法的时间复杂度

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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值