【问题标题】:Search algorithm with avoiding repeated states避免重复状态的搜索算法
【发布时间】:2015-11-25 00:46:41
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm search math graph artificial-intelligence


    【解决方案1】:

    这里不同状态的含义是什么。

    distinct state 的意思是一个唯一的单元格,你只计算网格中的每个单元格一次。

    不同状态数量的粗略上限:

    首先,查看大小为2d+1 X 2d+1 的子网格,从中间的节点开始。很容易看出,在d 步骤内(从中心)可以到达此子网格之外的任何单元格。此外,这个子网格中的单元格数量为(2d+1)*(2d+1) ~= 4d^2,因此我们找到了一个简单的上界,它明显优于朴素的4^d

    但是有很多单元格仍然无法到达(例如,您无法在d 范围内从中间(即索引(d,d))到(0,0),因此我们可以得到更严格的界限。

    方法 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多