广度优先搜索分支因子

时间:2013-03-19 00:16:01

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

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

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

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

所以我知道分支因子意味着“每个节点拥有的孩子的数量”

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

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

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

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

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

有人可以解释一下。三江源!

3 个答案:

答案 0 :(得分:5)

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

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

在这种情况下,因为图形是相对非循环的,所以b ^ d与m + n大致相同(它们对于树是相同的)。 O(b ^ d)更有用,因为b是固定的,d是你控制的东西。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

  

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

这应该让你清楚地了解O(| V | + | E |)和b ^ d

之间的区别