如何在两个抽象节点

时间:2015-09-30 23:58:38

标签: javascript json algorithm path-finding scientific-computing

我希望测试"小世界"或"六度分离"假设,任何人只能通过6个共同的朋友来达到另一个人的理论。 (即朋友的朋友的朋友的朋友的朋友)

示例节点数据(JSON):

{
    "name": "John Smith",
    "friends": [
        "Foo Bar",
        "John Doe"
    ]
}

就会有数百个这样的物体,每个物体相互连接。我想找到它们之间最短的路径。诸如游戏中发现的寻路算法是否适合这样的抽象概念(即:在2D或3D世界中无法表现的概念)或者是否有更优雅的解决方案?

我知道我可以通过不断增加的搜索深度多次遍历朋友列表,但这将是一个不太优雅的解决方案,需要花费很长时间来处理大量数据。

我已经很清楚路径寻找算法,例如A *,但我只是不确定这是否适合它们使用

至少程序应该输出一个字符串,例如"它需要x步才能从person1到person2"很高兴知道中间人,甚至可能从中获得一个漂亮的网络/图表。

2 个答案:

答案 0 :(得分:1)

这个链接Finding Paths in Graphs(第33,34页)为您提供了一个强大的图形算法,您可以假设这些是小世界的图形!

在实现算法之前,您应该将json数据转换为具有合理快速数据结构的图形(密集与稀疏图形表示)。

答案 1 :(得分:1)

你可能想看看Floyd Warshall所有节点的最短路径。复杂度是O(N ^ 3)

或者你可以从每个节点运行一个djikstra并在O(ElogV * N)时间内计算它

这是一个很好的实施http://www.geeksforgeeks.org/dynamic-programming-set-16-floyd-warshall-algorithm/