广度优先搜索生成的节点数是多少?

时间:2012-08-16 15:14:58

标签: algorithm breadth-first-search

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

2 个答案:

答案 0 :(得分:2)

根据您使用的算法的变体,通过广度优先搜索生成的节点数存在差异。

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

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)

答案 1 :(得分:0)

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

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