【问题标题】:What is the number of nodes generated by breadth-first search?广度优先搜索产生的节点数是多少?
【发布时间】:2013-04-29 11:45:08
【问题描述】:

没有。根据我的书,广度优先搜索生成的节点数是: N(BFS) = b + b^2 + .... + b^d + ( b^(d+1) - b ) 其中 b 是分支因子,d 是最浅节点的深度。但不应该只是 b + b^2 + .... + b^d 吗?因为那,在我看来是没有的。节点直到目标的深度。那么为什么会有+ ( b^(d+1) - b )

【问题讨论】:

  • 您的书是否包含示例以及定义?我知道这会帮助我解决这个问题。
  • @Brian J 它说“在最坏的情况下,我们会展开除最后一个节点之外的所有节点 d (因为目标本身没有展开),生成 b^d+1-b 级节点 d+1"
  • 所以有人知道没有的通用算法吗? BFS 生成的节点数
  • 最后一片叶子不会展开,因为他是最坏情况下唯一剩下的叶子

标签: algorithm breadth-first-search


【解决方案1】:

根据您使用的算法的变体,通过广度优先搜索生成的节点数量会有所不同。

如果在每个节点被选中进行扩展(从打开列表/队列中弹出)时将目标测试应用于每个节点,则生成节点的数量将是(在最坏的情况下):

1 + b + b^2 + b^3 + ... + b^d + (b^(d+1) - b),

其中d 是解深度,b 是分支因子(任何节点的最大后继数)。

这是因为在实际选择目标节点进行扩展之前,您必须生成目标节点的兄弟节点的子节点。在最坏的情况下,目标节点将是打开列表中最后一个被选择进行扩展的节点。

但是,这个通用的图搜索算法有一个细微的调整,那就是目标测试是在生成每个节点时应用到每个节点,而不是在选择它进行扩展时。

因此,假设解再次位于深度d。同样,在最坏的情况下,它是在该级别生成的最后一个节点。那么生成的节点总数为:

1 + b + b^2 + b^3 + ... + b^d.

所以第一种情况的空间复杂度是: O(b^(d+1)), 在第二种情况下: O(b^d).

【讨论】:

    【解决方案2】:

    我认为您所指的情况是在生成节点时评估测试条件;然后 BFS 以最小深度扩展“目标”下方的所有节点,目标节点本身的子节点除外。如果目标在深度d,最坏的情况是最后一片叶子没有展开(因为它是目标):

    1 + b + b^2 + ... + b*(b^d - 1) = 1 + b + b^2 + ... + b^(d+1) - b = (b^(d+2) - 1) / (b - 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多