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)×i−i+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)×i−i+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)×i−i+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(2−2i)
对于所有的扩展的
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=0∑Nn(i)ΔT0=[2(MS)2N(N+1)+MS(2−4N)(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}}
3hminLmin个结点,那么在不考虑结点重复扩展的情况下,每隔
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]/(3hminLmin)=[hmin2Lmin3XmaxYmaxZmax]
在此条件下,可以得到
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((2M2S2−4MS)N2)。