您的位置:首页 > 其它

BFS的辅助队列最小安全长度

2016-11-15 21:58 246 查看
本文仅对于搜索迷宫等完全矩形图的BFS搜索操作适用。

由于BFS搜索操作有一个o-c表(open-closed表)来判断是否搜索过,因此,这就预言了BFS所需要的QUENE的长度必然小于图中的实际节点总数(完全矩形图的节点总数恒不大于R*C)。基于QUENE的FIFO原理,对于一个标准图,我们可以很容易地证明:当S点,即起始点在图中间时,所需的QUENE的长度一般大于当S点位于图的边缘时的QUENE长度需求量。

再根据BFS的扩散模式,可以得知,当障碍物越少时,QUENE的需求长度越大,如下表a-1与a-2

43234
32123
##S12
32123
43234
a-1
101112 # 4
 910 # 2 3
 8 # S 1 2 
 7 6 # 2 3 
 6 54  3 4 
a-2
模拟一个队列,可以得出,a-1图的队列长度远大于a-2图。

为了满足最坏情况,姑且令S位于((R+1)/2,(C+1)/2),即图的中心,且图上无任何障碍。

Cmax=2(min(R,C)-max(R,C)%2)  (不完善)

该C 实质上是以S为中心的菱形的有效周长,当R==C时,该公式成立。

然而当R!=C时,如下图,



B-2 可以看成是B-1的所有节点进行过一次BFS操作后的状态,但是,显然B-2的队列内节点数比B-1内的节点数多2。

因此,我们定义σ(R,C) = { 0 , R!=C ||
max(R,C)%2 == 0 ;

{ 1 , R==C && max(R,C)%2 == 1 .

可得出结论:

Cmax=2(min(R,C)-σ(R,C) )

然而QUENE最小长度为Cmax时,可能会溢出,如下图所示:



很容易可以得知,C - 2 所需的QUENE 长度比公式计算出的要大
1!!!很可能会数据溢出!

经分析,当较小边,min(R,C)为偶数时,无图C所示的情况发生。

因此,我们定义 θ(BFS) = { 0 , BFS 有限扩散方向与 min(R,C)相同 

  { 1 , BFS
有限扩散方向与 min(R,C)不同

再定义一个函数 ξ(BFS,R,C)
= θ(BFS) * ( min(R,C) % 2 )

记Nmax为实际的QUENE需求量(最小的,且不会溢出的队列长度)。

则:

Nmax=Cmax
+ ξ(BFS,R,C) 


代入上列的各函数,展开得到:

Nmax=2[b](
min(R,C)(R,C)[/b] [b])[/b]
+ θ(BFS) * ( min(R,C) % 2 )

并且,显然我们可以同理得到,对于任意状态的BFS,队列的最小长度是搜索达到最广程度时的状态数量(用循环数组维护)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: