为什么双向搜索在BFS中更有效?

时间:2014-10-04 05:20:28

标签: algorithm search

想象一条线,有两个节点,A在-10中,B在10中,使用单向搜索,我们从(-30,10)搜索并使用双向搜索从(-20,0)搜索并且(0,10)和(10,20)。无论哪种方式,我们都在搜索40个步骤。现在,如果我们用多邻居扩展它,不难看出双向与单向搜索没有区别。我在这里弄错了。

2 个答案:

答案 0 :(得分:4)

如果状态图是一条线,那么就没有增益。如果节点的数量在距离上增长超过线性,则会获得。将半径为r(约为A)的圆的面积与半径为r / 2的两个圆(以A和B为中心)的面积进行比较。

enter image description here

后者(绿色)较小。它在更多方面更具戏剧性。在许多图中,节点的数量随半径大致呈指数增长,然后改善更大。

答案 1 :(得分:1)

一般来说,某些类型的稀疏图表可能更快。但是,由于它最差的是单向搜索(即它永远不会慢),并且没有那么复杂,通常是首选。

让我们说最短的路径有6个节点。在单向中,您需要找到所有6个,假设每个节点都连接到其他2个节点。您平均需要搜索大约64个(2 ^ 6个节点才能找到最短路径,对吧?相比之下,在双向算法中,每个搜索只需要找到3个(或4个,取决于实现)节点,只要求每个节点访问8(2 ^ 3)或16(2 ^ 4)个节点,总共16个或32个节点,具体取决于你是否可以在邻居(更快)或每次搜索时都能结束搜索找到了相同的节点(速度越慢)。

这种差异在我们的小图中可能看起来不多,但图表越大越密集,差异越明显。对于具有分支因子6的图,每个节点连接到6个其他节点,距离20(仍然不是特别大的图)数量将是3.6 * 10 ^ 15和1.2 * 10 ^ 8这是一个差异快7个数量级。现在想象一下,这种差异可以扩展到Google地图大小的图表。