我希望测试"小世界"或"六度分离"假设,任何人只能通过6个共同的朋友来达到另一个人的理论。 (即朋友的朋友的朋友的朋友的朋友)
示例节点数据(JSON):
{
"name": "John Smith",
"friends": [
"Foo Bar",
"John Doe"
]
}
就会有数百个这样的物体,每个物体相互连接。我想找到它们之间最短的路径。诸如游戏中发现的寻路算法是否适合这样的抽象概念(即:在2D或3D世界中无法表现的概念)或者是否有更优雅的解决方案?
我知道我可以通过不断增加的搜索深度多次遍历朋友列表,但这将是一个不太优雅的解决方案,需要花费很长时间来处理大量数据。
我已经很清楚路径寻找算法,例如A *,但我只是不确定这是否适合它们使用
至少程序应该输出一个字符串,例如"它需要x步才能从person1到person2"很高兴知道中间人,甚至可能从中获得一个漂亮的网络/图表。
答案 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/