Algorithm 在neo4j中指定图遍历算法的起点

Algorithm 在neo4j中指定图遍历算法的起点,algorithm,graph,neo4j,cypher,Algorithm,Graph,Neo4j,Cypher,我正在尝试编写一个算法,将值从起始节点传播到整个连接的组件。基本上,如果A收到5个请求,并且A为A收到的每个请求向B发送5个请求,B将收到25个请求 所以基本上,我想从这开始 对此 我用neo4j编写了以下代码片段: MATCH (a:Loc)-[r:ROAD]->(b:Loc) SET b.volume = b.volume + a.volume * r.cost RETURN a,r,b 但是,我不知道的是,我应该如何为这个算法指定一个起始点,以开始?在本例中,neo4j似乎

我正在尝试编写一个算法,将值从起始节点传播到整个连接的组件。基本上,如果A收到5个请求,并且A为A收到的每个请求向B发送5个请求,B将收到25个请求

所以基本上,我想从这开始

对此

我用neo4j编写了以下代码片段:

MATCH (a:Loc)-[r:ROAD]->(b:Loc)
 SET b.volume = b.volume + a.volume * r.cost
 RETURN a,r,b
但是,我不知道的是,我应该如何为这个算法指定一个起始点,以开始?在本例中,neo4j似乎正确地更新了值,但我认为这对于更大的图形不起作用。我希望显式地使算法开始从开始节点传播值


谢谢。

在这种情况下,计划员将使用标签查找查询的起始位置(您可以运行查询说明以查看查询计划),因此它将匹配所有:Loc节点并展开模式并相应地修改属性


这将适用于所有人:Loc节点,这是您想要的,还是您只希望这适用于从某个起始节点可以访问的图形的较小部分?

我相信会有更好的答案,而且这种方法有一些局限性,因为对图形做了一些假设,但这适用于您的示例

请注意,我在
:Loc
节点中添加了一个
id
属性,但我只使用它来选择开始(以及在结束时打印节点
id


这里的想法是从起始节点获取到每个节点的最长路径。这些按“接近度”排序,然后按“接近度”的顺序更新卷。

这很可能适用于整个图(但不同用例的关系标签不同)。然而,我希望它更像是一种扫描线算法方法,它总是首先到达我的起始节点(这会因不同的用例而异)。谢谢!这解决了我最大的问题之一——对我的所有用例进行通用查询@bitnahian小心你的图表。这将仅更新(通过某种方式)连接到起始节点的节点。因此,例如,如果您有一个带有断开连接的子图的大型图,并且您想要“时钟/步进”该图,那么您将需要使用此技术执行多个步骤。另外,如果你有一个循环图,我怀疑这会满足你的要求。我的图是非循环的。整个图形是一个连接的组件,所以至少现在应该可以正常工作。如果不是太麻烦的话,你能解释一下maxLp的顺序是什么吗?@bitnahian,即使这是解决问题的正确方法,我很确定密码可以提高效率和/或非常大的图形处理。
MATCH p=(n:Loc)<-[:ROAD*]-(:Loc {id: 0})
WITH DISTINCT n, max(length(p)) as maxLp
ORDER BY maxLp  // order the nodes by their maximum distance from start
MATCH (n)<-[r:ROAD]-(p:Loc)
SET n.volume = n.volume + r.cost * p.volume
RETURN DISTINCT n.id, n.volume
n.id    n.volume
1           4000
2         200000
3         200000
4       16400000
5      508000000
6    21632000000