我在接受采访时被问到这个问题,以确定两个人是否在Facebook直接或间接关联。
说有一些朋友b,c,d,e和c有几个朋友b,d,f,g和f有朋友x,y,z。然后a和z是间接的朋友。
是否有一个很好的算法来确定它们是如何连接的?
This帖子有类似的问题,但他有太多的标准,所以我认为必须有更好的方法来做到这一点。任何人都可以提出建议吗?
答案 0 :(得分:2)
如果可以访问,请运行Breadth First Search以获得到达该特定朋友的最小跃点数。到目前为止,访问过的节点上有一些书籍,您可以让被访问的朋友联系到被搜索的朋友。
此算法在Liner time O(V + E)
中运行。
PsuedoCode:
广度优先搜索(图形,根,目标):
create empty set Checked create empty queue Queue add Root to Checked Queue.enqueue(Root) while Queue is not empty { Current = Queue.dequeue() if Current.has(Goal) { return Current } for each Node that is adjacent to Current { if Node is not in Checked { Checked.add(Node) Queue.enqueue(Node) } } }
如果在找到被搜查的朋友之前需要访问的朋友大于1,你可以说他们是间接连接的。
这也可用于检查它们是否已连接。