搜索算法避免重复状态

时间:2015-08-31 03:18:51

标签: algorithm search math graph artificial-intelligence

参考Russel和Norvig的第3.5节: 在网格上,每个状态有四个后继,因此包含重复状态的搜索树有4 ^ d个叶子;但是在任何给定状态的d步骤中只有大约2d ^ 2个不同的状态。

这里不同国家的含义是什么。有人可以通过考虑d的各种值来解释我,比如1,2,3,4。

1 个答案:

答案 0 :(得分:2)

  

这里不同国家的含义是什么。

distinct state的含义是一个唯一的单元格,只计算一次网格中的每个单元格。

原油上限与不同州的数量相关:

首先,查看大小为2d+1 X 2d+1的子网格,然后从中间的节点开始。很容易看出,在d步骤内,该子网格外部没有可以到达的单元格(从中心开始)。此外,此子网格中的单元格数量为(2d+1)*(2d+1) ~= 4d^2,因此我们发现一个简单的上限明显优于天真4^d

但是有很多单元格仍然无法访问(例如,您无法从d步骤到(0,0)从中间(这是索引(d,d)),所以我们可以得到更严格的约束。

方法1:组合:

如果我们说我们只能向前和向右移动,那么我们可以遍历的可到达小区的数量是sum { CC(i,2) | i=0,1,...,d }。在这里,CC代表stars and bars解决方案,定义为:

CC(n,k) = Choose(n+k-1,k-1) = (n+k-1)!/(n!*(k-1)!)

分配公式时,我们得到:

sum{ (i+1)!/(i)!1! | i=1,...,d} = sum { (i+1) | i=1,...,d}

以上是总和为(d)(d+1)/2

的算术级数之和

然而,请注意,只允许"向上和向右"移动,我们只允许到达网格的右上角,我们也希望允许它用于其他季度。从对称性来看,每个季度可达到的细胞数量与上述相同,另外 - 添加原始细胞(我们从一个开始),所以总得到:

#reachable_cells(d) = 4* (d)(d+1)/2 = 2d(d+1) + 1 ~= 2d^2

方法2几何:

查看以下大小为7 X 7的示例矩阵:

6 5 4 3 4 5 6
5 4 3 2 3 4 5
4 3 2 1 2 3 4
3 2 1 0 1 2 3
4 3 2 1 2 3 4
5 4 3 2 3 4 5
6 5 4 3 4 5 6

此矩阵包含距离中心最多3个距离的所有节点。
如果仔细观察,可以看到每个距离实际上围绕中心形成一个正方形,边长为d。 (因此对于d=1,有一个方形,大约为0,边长为1,对于d=2,有一个边长为2的正方形,依此类推)

在正方形中,周长为4a - 其中a是边长。
因此,从中心到达的最多d步的唯一单元数是任何此类矩形上的单元数。

边长为i的矩形上的单元格数量为4i,我们需要为i<d的每个可能矩形求和,得到:

#reachable_cells(d) = sum { 4i | i=1,....,d } = 4 sum{ i | i=1,...,d}

这是算术级数的总和(并再次添加原点),我们得到:

#reachable_cells(d) = 4 * d(d+1)/2 + 1 = 2d(d+1) + 1 ~= 2d^2

<强>示例:

6 5 4 3 4 5 6
5 4 3 2 3 4 5
4 3 2 1 2 3 4
3 2 1 0 1 2 3
2 3 2 1 2 3 4
5 4 3 2 3 4 5
6 5 4 3 4 5 6

在上面,你有7X7矩阵,它包含距离中心最远3个距离的所有单元格,正如你所看到的那样 - 通过计算可达状态的数量并看到它适合论坛:

#reachable_cells(0) = 2*0*1 + 1 = 1
#reachable_cells(1) = 2*1*2 + 1 = 5
#reachable_cells(2) = 2*2*3 + 1 = 13
#reachable_cells(3) = 2*3*4 + 1 = 25