如何找到两个抽象节点之间的路径?



我想测试"小世界"或"六度分离"假设,该理论认为任何人都可以通过6个共同的朋友联系到另一个人。(即一个朋友的朋友的朋友的朋友的朋友的朋友)

节点数据示例(JSON):

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

将会有数百个这样的物体,每个都连接到另一个。我想找到它们之间的最短路径。游戏中的寻径算法是否适用于这类抽象概念(游戏邦注:即无法在2D或3D世界中呈现的概念),或者是否存在更优雅的解决方案?

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

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

至少程序应该输出一个字符串,如"从person1到person2需要x步"。如果知道中间的人,甚至可能从中获得一个很好的web/图形,那就太好了。

这个链接在图中寻找路径(第33页,34页)给你一个强大的图算法,你假设,这些是小世界图!

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

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

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

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

最新更新