树的广度优先搜索(下):为什么双向广度优先搜索的效率更高?
内容:
基于上篇的六度空间理论,作者引出了查找效率更高的搜索方法——双向广度优先搜索。实现步骤如下:
假设有两个人 a、b。
我们首先从 a 出发,进行广度优先搜索,记录 a 的所有一度好友 a_{1},然后看点 b 是否出现在集合 a_{1} 中。
如果没有,就再从 b 出发,进行广度优先搜索,记录所有一度好友 b_{1},然后看 a 和 a_{1} 是否出现在 b 和 b_{1} 的并集中。
如果没有,就回到 a,继续从它出发的广度优先搜索,记录所有二度好友 a_{2},然后看 b 和 b_{1} 是否出现在 a、a_{1} 和 a_{2} 三者的并集中。
如果没有,就回到 b,继续从它出发的广度优先搜索。
如此轮流下去,直到找到 a 的好友和 b 的好友的交集。
如果有交集,就表明这个交集里的点到 a 和 b 都是通路。
并且还用代码实现了。
总结:
广度优先搜索固然可以解题,但是仍然可以再进一步,从两个不同的方向进行广度优先搜索,这时的解题效率将会更高。这也是算法学习中的一个重要思想——不仅仅追求解题,还追求解题的高效。