neo4j社区发现算法(Community detection algorithms)-3.The Connected Components algorithm

博客介绍了连接组件算法(并查集算法),它是解决动态连通性问题的高效数据结构,有联合、查找等操作。还阐述了Neo4j算法中将并查集分为无权重和有权重两种,给出实例对比差异。此外,介绍了强连通组件算法及强连通图的概念和Neo4j中的scc算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.介绍:
  连接组件算法也可称为并查集算法,是解决动态连通性问题的一类非常高效的数据结构。
  在计算机科学中,并查集是一种树形的数据结构,用于处理不交集的合并及查询问题。
  并查集存在两个操作(1,union联合;2,find查找)和一个需要解答的问题(1.isConneced是否相互连           接;2,isSameSet是否在同一集合中)
二.neo4j算法
  在neo4j算法中,将并查集算法分为两种,一种是无权重的,一种是有权重的,语法分别如下:
  
无权重

CALL algo.unionFind.stream(label:String, relationship:String)
YIELD nodeId,setId

有权重

CALL algo.unionFind.stream(label:String, relationship:String, {weightProperty:'weight',
defaultValue:0.0, threshold:1.0, concurrency: 1})
YIELD nodeId,setId

三.实例:

创建节点及关系:

MERGE (nAlice:User {id:'Alice'})
MERGE (nBridget:User {id:'Bridget'})
MERGE (nCharles:User {id:'Charles'})
MERGE (nDoug:User {id:'Doug'})
MERGE (nMark:User {id:'Mark'})
MERGE (nMichael:User {id:'Michael'})
MERGE (nAlice)-[:FRIEND {weight:0.5}]->(nBridget)
MERGE (nAlice)-[:FRIEND {weight:4}]->(nCharles)
MERGE (nMark)-[:FRIEND {weight:1}]->(nDoug)
MERGE (nMark)-[:FRIEND {weight:2}]->(nMichael)

在这里插入图片描述
无权重:

CALL algo.unionFind.stream('User', 'FRIEND', {})
YIELD nodeId,setId
RETURN algo.getNodeById(nodeId).id AS user, setId

在这里插入图片描述有权重:

CALL algo.unionFind.stream('User', 'FRIEND', {weightProperty:'weight',
defaultValue:0.0, threshold:1.0, concurrency: 1})
YIELD nodeId,setId
RETURN algo.getNodeById(nodeId).id AS user, setId

在这里插入图片描述通过对比两个有无权重之间算法的差异,可以看到Bridget在有权重的算法中被单独分为了一个集合。
四.The Strongly Connected Components algorithm 强连通组件算法
   
   强连通图是指如果在有向图中,任意两个节点都互相可达,则为强连通图

neo4j中scc算法:

CALL algo.scc.stream(label:String, relationship:String)
yield nodeId,setId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值