我们啥时候应该使用普通 BFS 而不是双向 BFS?

Posted

技术标签:

【中文标题】我们啥时候应该使用普通 BFS 而不是双向 BFS?【英文标题】:When should us use normal BFS over bidirectional BFS?我们什么时候应该使用普通 BFS 而不是双向 BFS? 【发布时间】:2021-12-31 06:39:55 【问题描述】:

我知道双向 BFS 比使用普通 BFS 有很多优势,因为理论上它可以将发现两个节点之间最短路径的时间和确定一个节点是否可以从另一个节点到达的时间减半。

我也明白,只有当我们唯一定义了两个节点时,我们才应该使用双向。

在什么情况下我们应该更喜欢普通 BFS 而不是双向 BFS?

【问题讨论】:

【参考方案1】:

我了解双向 BFS 由给定的开始和目标节点组成,从开始和目标交替扩展节点层,直到从两端到达中间的节点。然后,从起点到目标的最短路径被理解为从起点到中间节点的最短路径,然后是从中间到目标的最短路径。我可以看到与标准 BFS 方法相比,可能需要扩展的节点更少。然而,

实现标准 BFS (sBFS) 比实现双向 BFS(简称 bBFS)更容易。简单通常是好的,因为它更容易编码并在以后验证其正确性。 如果图是有向图且未加权,sBFS 保证它会以最少的步骤找到从起点到目标的最短路径; bBFS 不保证适用于有向图。 运行 sBFS 后,您可以重建从起点到目标节点前最多 1 步(即停止搜索之前)的所有节点的最短路径。这本身可能很有价值。运行 bBFS 不会生成这样的列表。

考虑到这一点,我认为 bBFS 仅适用于非常狭窄的情况(根据图表,预计其性能优于 sBFS),并且 sBFS 在更大范围内既简单又有用场景。

【讨论】:

另外:双向 BFS 可能具有速度优势,并且在开始和目标之间存在停止时可能很有用。 @tucuxi 确实是 KISS(保持简单,愚蠢)是 Andrew Tanenbaum 是这里要遵守的法律!

以上是关于我们啥时候应该使用普通 BFS 而不是双向 BFS?的主要内容,如果未能解决你的问题,请参考以下文章

Eight HDU - 1043 (双向BFS)

双向bfs和双向dfs

HDOJ3085 Nightmare II 双向BFS

HDU3085 Nightmare Ⅱ (双向BFS)

HDU3085nightmare2 双向BFS

2017多校Round10(hdu6171~hdu6181)