算法 - 朋友的朋友

时间:2013-02-28 16:30:29

标签: algorithm graph-theory graph-algorithm

我只是学习图论,我正在尝试将代码写入算法问题。问题涉及 n 一群人,他们每个人都与其中一个成员至少有一个相互的友谊。问题是要找到两个人之间最短的友谊关系。最短的友谊链接包含最少的人数。例如; A和B是共同的朋友,B和C是共同的朋友,如果A和C也是共同的朋友,那么A-C和A-B-C是A和C之间的友谊链接,但是A-C被认为是较短的,因为它涉及较少的个人。

我想知道哪种图理论算法适用于这种情况,我将不胜感激任何有关图论(wiki除外)的免费互联网文档的推荐。

1 个答案:

答案 0 :(得分:7)

对于两个节点的最短路径的未加权问题 - 您可以使用BFS,不需要Dijkstra's algorithm,这更难实现且效率较低。

请注意,BFS的主要问题是空间效率,因为它在O(|V|)空间中运行,可以通过与名为Iterative Deepening DFS的DFS进行权衡来部分解决。它也是最佳的,但会消耗更少的空间(以额外的时间为代价)。


似乎并非如此,但如果你可以评估你与目标的接近程度 - 你可以使用A* Algorithm,这是一个好的heuristic function可能会更快地执行

另请注意:如果您想要所有用户之间的最短距离,可以使用Floyd-Warshall's algorithm