图的任意两个节点之间的最长最短路径

时间:2013-10-19 17:40:53

标签: neo4j cypher

我试图在我的Neo4j数据库中找到两个彼此相距最远的节点。出于我的分析的目的,我正在考虑两个节点之间的最短距离作为它们之间的距离。因此,最远的两个节点将在它们之间具有最长的最短路径。我使用Cypher的以下语法来查找最短的节点。

如Neo4j示例文档http://docs.neo4j.org/chunked/milestone/query-match.html#match-shortest-path中所示,我可以运行以下Cypher查询。

MATCH p = shortestPath((martin:Person)-[*..15]-(oliver:Person))
WHERE martin.name = 'Martin Sheen' AND oliver.name = 'Oliver Stone'
RETURN p

我的数据库有超过50万个节点。蛮力的方式显然需要很长时间。有没有简单或更快的方法来获得这两个节点?

[作为额外的皱纹..图表已加权,但此细节可以忽略。]

1 个答案:

答案 0 :(得分:5)

如果我正确阅读此内容,您需要all-pairs shortest path。这将为您提供一个列表,其中每个节点都是一个源,也是每个其他节点的最短路径。虽然它确实按重量做,但你可以简单地使用1的重量来做所有事情。

你必须自己用Java实现这一点,因为Cypher对此没有任何帮助。