全源最短路径的应用

  • ​​一、最短路径-CYPHER自带函数​​
  • ​​二、全源最短路径-neo4j-graph-algorithms算法包​​
  • ​​1、isFinite函数的使用​​
  • ​​2、将图形作为无向图处理​​
  • ​​3、大图运算​​
  • ​​三、通过全源最短路径算法寻找路径紧密度排序​​
  • ​​1、路径R的权值设置​​
  • ​​2、增加存储过程​​
  • ​​3、使用关系属性COST计算DISTANCE​​
  • ​​4、使用距离默认值计算DISTANCE​​

一、最短路径-CYPHER自带函数

输入:两个节点
输出:两点之间的最短路径

1、查询周迅与王菲的最短路径

MATCH p = shortestPath((周迅:明星 {名称:"周迅"})-[*..6]-(王菲:明星 {姓名:"王菲"}))RETURN p;

2、查询周迅与王菲的所有最短路径

MATCH p = allShortestPaths((周迅:明星 {名称:'周迅'})-[*..6]-(王菲:明星 {姓名:'王菲'})) RETURN p;

二、全源最短路径-neo4j-graph-algorithms算法包

全源最短路径可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离。
输入:一批节点
输出:当前点与其它点之间的距离(两两之间的最短路径)

- 构造样例数据:
MERGE (a:Loc {name:'A'})
MERGE (b:Loc {name:'B'})
MERGE (c:Loc {name:'C'})
MERGE (d:Loc {name:'D'})
MERGE (e:Loc {name:'E'})
MERGE (f:Loc {name:'F'})
MERGE (a)-[:ROAD {cost:50}]->(b)
MERGE (a)-[:ROAD {cost:50}]->(c)
MERGE (a)-[:ROAD {cost:100}]->(d)
MERGE (b)-[:ROAD {cost:40}]->(d)
MERGE (c)-[:ROAD {cost:40}]->(d)
MERGE (c)-[:ROAD {cost:80}]->(e)
MERGE (d)-[:ROAD {cost:30}]->(e)
MERGE (d)-[:ROAD {cost:80}]->(f)
MERGE (e)-[:ROAD {cost:40}]->(f);

全源最短路径的应用_最短路径

1、isFinite函数的使用

普通的cypher不支持过滤无穷大的值,所以添加了isFinite函数来帮助过滤结果中的无穷值。此查询返回彼此之间距离最远的前10对节点。
algo.allShortestPaths.stream过程第一个参数cost是关系ROAD的权值属性字段。

CALL algo.allShortestPaths.stream('cost',{nodeQuery:'Loc',defaultValue:1.0})
YIELD sourceNodeId, targetNodeId, distance
WITH sourceNodeId, targetNodeId, distance
WHERE algo.isFinite(distance) = true
MATCH (source:Loc) WHERE id(source) = sourceNodeId
MATCH (target:Loc) WHERE id(target) = targetNodeId
WITH source, target, distance WHERE source <> target
RETURN source.name AS source, target.name AS target, distance
ORDER BY distance DESC
LIMIT 10

全源最短路径的应用_neo4j_02

2、将图形作为无向图处理
CALL algo.allShortestPaths.stream('cost', {
nodeQuery:'MATCH (n:Loc) RETURN id(n) as id',
relationshipQuery:'MATCH (n:Loc)-[r]-(p:Loc) RETURN id(n) as source, id(p) as target, r.cost as weight',
graph:'cypher', defaultValue:1.0}) YIELD sourceNodeId, targetNodeId, distance RETURN sourceNodeId, targetNodeId, distance ORDER BY distance DESC LIMIT 10
3、大图运算

默认支持20亿节点与关系,超过此值需要设置config-graph:‘huge’

CALL algo.allShortestPaths.stream('cost',{nodeQuery:'LABEL',defaultValue:1.0,graph:'huge'})
YIELD sourceNodeId, targetNodeId, distance
RETURN sourceNodeId, targetNodeId, distance ORDER BY distance DESC LIMIT 10

三、通过全源最短路径算法寻找路径紧密度排序

全源最短路径算法寻找路径紧密度排序,此排序即为目标群体的路径紧密度排序。
通过目标群体的路径紧密排序列表,可以很直接的观察到当前图中人物之间的关系,为进一步分析提供便捷的入口。
路径紧密度排序:两点之间可达路径越短排序越靠前。

1、路径R的权值设置

路径R的权值设置如下所示:

全源最短路径的应用_权值_03

2、增加存储过程

增加存储过程,计算路径紧密度权重并排重

CALL zdr.shortestPath.allPathsTightness({sourceIds},{targetIds},{distanceSTE}) YIELD source,target,distance,tightnessSort RETURN source,target,distance,tightnessSort
3、使用关系属性COST计算DISTANCE

使用关系COST属性带权重计算(返回紧密度最高的前一百组节点):

CALL algo.allShortestPaths.stream('cost',{nodeQuery:'Loc',defaultValue:1.0})
YIELD sourceNodeId, targetNodeId, distance
WITH sourceNodeId, targetNodeId, distance
WHERE algo.isFinite(distance) = true
MATCH (source:Loc) WHERE id(source) = sourceNodeId
MATCH (target:Loc) WHERE id(target) = targetNodeId
WITH source, target, distance WHERE source <> target
WITH collect(id(source)) AS sourceIds, collect(id(target)) AS targetIds, collect(distance) AS distanceSTEs
CALL zdr.shortestPath.allPathsTightness(sourceIds,targetIds,distanceSTEs) YIELD source,target,distance,tightnessSort RETURN source,target,distance,tightnessSort ORDER BY distance ASC LIMIT 100

全源最短路径的应用_存储过程_04

4、使用距离默认值计算DISTANCE

algo.allShortestPaths.stream的算法实现中保留的默认值为1.0

全源最短路径的应用_最短路径_05

CALL algo.allShortestPaths.stream(null,{nodeQuery:'Loc',defaultValue:1.0})
YIELD sourceNodeId, targetNodeId, distance
WITH sourceNodeId, targetNodeId, distance
WHERE algo.isFinite(distance) = true
MATCH (source:Loc) WHERE id(source) = sourceNodeId
MATCH (target:Loc) WHERE id(target) = targetNodeId
WITH source, target, distance WHERE source <> target
WITH collect(id(source)) AS sourceIds, collect(id(target)) AS targetIds, collect(distance) AS distanceSTEs
CALL zdr.shortestPath.allPathsTightness(sourceIds,targetIds,distanceSTEs) YIELD source,target,distance,tightnessSort RETURN source,target,distance,tightnessSort ORDER BY distance ASC LIMIT 100