2

问题是我必须找到所有最小权重和最大深度可能为 6 的路径(中间可能有 5 个顶点)。两个顶点之间可以有更多不同权重的关系。

例如路径:

weight(ABEF) = 2+3+1 = 6或者2+2+1 = 5如果我们在节点 B 和 E 之间选择不同的关系权重。

其他道路也是如此 - 由于不同的关系,相同节点之间的权重可能不同。

数据库很大,计算深度 6 的所有可能性需要很长时间:/

如何检查两个节点之间的所有关系权重,并且在同一搜索中不检查权重最大的关系,如果存在具有相同最小权重的关系,那么将它们都取走?

到目前为止,我有:

START n=node(158371), m=node(183090)
MATCH p=n-[r*..4]-m
WITH p, length(p) as len,r
RETURN  reduce(res=0, x in r: res + x.weight) as totalscore, len
ORDER BY totalscore desc;

但是如果我深入搜索 6 并找到所有可能性,数据库就会中断。reduce 函数就像收集字符串一样,但我需要计算重量。( 2+3+1=6 not 2+3+1=231)

Ps 如果图形图像不可见,它在这里: http: //postimg.org/image/bf9rfdtf7/

4

2 回答 2

2

听起来像是使用Dijkstra 算法解决的典型问题。不幸的是,我认为 Cypher 语法不存在,但如果您不介意使用 JavaREST API,Neo4j 附带了一个实现。

于 2013-08-09T22:22:06.133 回答
0

在这种情况下,Dijkstra 算法听起来是真正的问题解决者!但我想知道如果我有很多标准,那么我可以先过滤那些我期望返回结果较少的标准,然后找到最便宜的路径可能会快得多。

但是,如果我只放置当前最便宜的路径,那么在 Cypher 中是否可以在数组中存储权重和路径,但是当甚至最便宜的时候,删除数组中的所有内容并放入新的最便宜的路径并最终返回数组?

于 2013-08-10T10:21:29.603 回答