【问题标题】:Breadth first search branching factor广度优先搜索分支因子
【发布时间】:2013-03-19 00:16:01
【问题描述】:

BFS的运行时间是O(b^d)

b 是分支因子 d 是图从起始节点开始的深度(级别#)。

我用谷歌搜索了一段时间,但我仍然没有看到有人提到他们是如何找出这个“b”的

所以我知道分支因子是指“每个节点拥有的子节点数”

例如,二叉树的分支因子是 2。

所以对于 BFS 图,b= 平均我们图中每个节点的所有分支因子。

或b = MAX(在每个节点的所有分支因子中)?

此外,无论我们选择哪种方式 b,在接近我们的运行时间时似乎仍然模棱两可。 例如,如果我们的图有 30000 个节点,那么只有 5 个节点有 10000 个分支,其余 29955 个节点只有 10 个分支。我们将深度设置为 100。

在这种情况下,似乎 O(b^d) 没有意义。

谁能解释一下。谢谢!

【问题讨论】:

  • 严格来说d不是图的深度。它是最浅解的深度。
  • 最浅的解决方案是什么意思?
  • 如果有多个解,并且解的深度不同,那么BFS会在找到其中一个解,即最浅的解时终止。除非您想搜索整棵树,否则 d 的定义可能不同。
  • 但是当我们谈论运行时,它是关于图的大小,比如图上有多少条边。而且我们必须访问每条边一次,所以运行时间是 O(|E|).... 对吗?

标签: performance algorithm artificial-intelligence breadth-first-search


【解决方案1】:

更经常引用的运行时是 BFS 为 O(m + n),其中 m 是边数,n 是节点数。这是因为每个顶点处理一次,每条边最多处理两次。

我认为在使用 BFS 时使用 O(b^d),例如,在国际象棋游戏中进行暴力破解,其中每个位置都有一个相对恒定的分支因子,并且您的引擎需要深入搜索一定数量的位置。例如,国际象棋的 b 约为 35,深蓝的搜索深度为 6-8(最高可达 20)。

在这种情况下,由于图是相对无环的,b^d 与 m + n 大致相同(它们对于树是相等的)。 O(b^d) 更有用,因为 b 是固定的,d 是您可以控制的。

【讨论】:

  • O(m + n) 是在图搜索的上下文中。 O(b ^ d) 在树搜索的上下文中。
  • 树是没有环的图
  • 所以如果我们在图上应用 BFS,运行时间应该是 O(|E|)
  • 对于图形搜索,它是 O(|E| + |V|)。如果您的图形是“树状”的(例如国际象棋图形,通过一些简单的缓存可以排除大多数循环)O(b ^ d) 也是正确的
【解决方案2】:

在图 O(b^d) 中,b = MAX。因为这是最坏的情况。查看来自princeton http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Breadth-first_search.html 的链接 - 转到时间复杂度部分

【讨论】:

【解决方案3】:

引用 Stuart Russel 和 Peter Norvig 的人工智能 - 一种现代方法

时间和空间复杂度总是根据问题难度的某种度量来考虑。在理论计算机科学中,典型的度量是状态空间图的大小,|V | + |E|,其中 V 是图的顶点(节点)集合,E 是边(链接)集合。当图形是输入到搜索程序的显式数据结构时,这是合适的。 (罗马尼亚的地图就是一个例子。)在人工智能中,图通常由初始状态、动作和转换模型隐式表示,并且通常是无限的。由于这些原因,复杂性用三个量表示: b,任何节点的分支因子或最大后继数; d,最浅目标节点的深度(即从根开始沿路径的步数); m,状态空间中任意路径的最大长度。时间通常以搜索期间生成的节点数来衡量,而空间则以存储在内存中的最大节点数来衡量。在大多数情况下,我们描述了在树上搜索的时间和空间复杂度;对于图,答案取决于状态空间中的路径有多“冗余”。

这应该让您清楚地了解 O(|V|+|E|) 和 b^d 之间的区别

【讨论】:

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