这是我最近在互联网上发现的一道面试题:
如何在Facebook上找到两个人之间的分离度?讨论不同的想法、算法和权衡。(分离度的定义:http://en.wikipedia.org/wiki/Six_degrees_of_separation)
以下是我的想法:
我能想到的候选算法有:广度优先搜索(BFS)、深度优先搜索(DFS)、深度限制搜索(DLS)、迭代加深搜索(IDS)。
首先,应该考虑使用DFS。即使两个人已经连接(即分离度=1),该算法也很可能会沿着错误的路径搜索很长时间。
BFS保证可以找到最小分离度(因为图没有权重)。假设最大分支因子为b,两个目标人物之间的实际分离度为d,则时间复杂度和空间复杂度均为O(b^d)。
如何在Facebook上找到两个人之间的分离度?讨论不同的想法、算法和权衡。(分离度的定义:http://en.wikipedia.org/wiki/Six_degrees_of_separation)
以下是我的想法:
我能想到的候选算法有:广度优先搜索(BFS)、深度优先搜索(DFS)、深度限制搜索(DLS)、迭代加深搜索(IDS)。
首先,应该考虑使用DFS。即使两个人已经连接(即分离度=1),该算法也很可能会沿着错误的路径搜索很长时间。
BFS保证可以找到最小分离度(因为图没有权重)。假设最大分支因子为b,两个目标人物之间的实际分离度为d,则时间复杂度和空间复杂度均为O(b^d)。
由于最大可能的分离度是未知的(虽然不应该太高于6),使用DLS可能不是一个好主意。然而,IDS似乎比BFS更好 - 它的时间复杂度也是O(b^d)(尽管由于中间节点的重复访问实际时间成本略高于BFS),而其空间复杂度是O(bd),这比O(b^d)要好得多。
毕竟,我会选择IDS。这在面试中是可以接受的答案吗?我在上述推论中犯了任何错误吗?还是有任何更好的解决方案我错过了吗?
提前感谢。