我收到了制作social graph的任务,其中center中有一位用户显示了他所拥有的连接。
但在我们达到目标之前,我们的重点是如何确定2个用户之间的shortest path。
我找到了一些算法来做,但似乎需要花费很多时间,而且因为它是关于社交链接,我们正在寻找一个最快的因为我们需要定期运行它跟上朋友的最新动态。
那么,您知道哪个是确定两个用户之间最短路径的最快方法吗?
PS:如果你知道PHP&中的一个例子MySQL,我会给你一个虚拟啤酒(或可乐)。 :d
答案 0 :(得分:8)
Dijkstra's Algorithm找到图表上两个节点之间的最短路径。
答案 1 :(得分:2)
你想要的是all-pairs shortest path算法;如果必须为图形全局生成对,则比为每对运行最短路径算法更快。保持更新是另一个问题 - 请注意,每次添加图表连接时都必须这样做,而不是每次添加人员时都要这样做。如果这是用于生产站点,则可能值得将图形生成维护为以比php更快的语言编写的脱机任务,并将其结果写回数据库。你可能会在那里找到现有的c ++实现。
答案 2 :(得分:1)
在我看来,无论如何你要绘制整个图形,最简单的方法是跟踪每个人的路径,因为它们被添加到图形中。所以对于这个人的朋友来说,这条路只是“主要人物 - 朋友”。然后,当您将每个朋友添加到图表中时,存储路径“主要人物 - >朋友1 - >朋友2”等。
如果我脑海中的图片准确无误,这似乎是最简单的方法,但我可能会有些误解。
答案 3 :(得分:1)
Dijsktra的算法在加权图上运行良好。在社交图中,所有边都具有相同的权重。所以Dijkstra的算法变成了BFS。然而,在密集图上,每个级别检查的节点列表将是巨大的。您可以做的一项优化是,从两端开始搜索(A和B)。