✓ 文件回写 ✕ 属性回写 ✓ 直接返回 ✓ 流式返回 ✓ 统计值
概述
三角形计算(Triangle Counting)算法能识别图中的三角形,三角形表示一组相互连接的三个节点。三角形计算能够体现图中任意三个点之间形成环路的能力。
社交网络中的三角形表示存在有凝聚力的社区,识别三角形有助于理解网络中个人或群体的聚类和相互联系。在金融网络或交易网络中,三角形的存在可能表示存在可疑或欺诈活动,三角形计数可以帮助识别可能需要进一步调查的交易模式。
基本概念
三角形
在复杂图中,任意两点之间可以有多条边,这导致三个节点可能形成超过一个三角形。以下图为例:
- 计算按边组装的不同三角形,有 4 个。
- 计算按点组装的不同三角形,有 2 个。
在复杂图中,按边组装的三角形数量往往大于按点组装的三角形数量。组装原则应根据分析目标和应用场景而定。在社交网络分析中,重点通常是理解个体之间的连接模式,因此通常采用按点组装的原则。在金融网络分析或其他类似的领域,重点往往是节点之间的关系,例如金融交易或交互,按边组装原则通常是首选,因为这样可以检查节点连接的紧密程度以及资金或信息如何流经网络。
特殊说明
- 三角形计算算法忽略边的方向,按照无向边进行计算。
语法
- 命令:
algo(triangle_counting)
- 参数:
名称 |
类型 |
规范 |
默认 |
可选 |
描述 |
---|---|---|---|---|---|
type | int | 1 , 2 |
1 |
是 | 1 按边组装三角形,2 按点组装三角形 |
result_type | int | 1 , 2 |
1 |
是 | 1 返回三角形数量,2 返回构成三角形的点或边 |
limit | int | ≥-1 | -1 |
是 | 返回的结果条数,-1 返回所有结果 |
示例
示例图如下:
文件回写
配置项 |
回写内容 |
---|---|
filename | edge1 ,edge2 ,edge3 或 node1 ,node2 ,node3 |
algo(triangle_counting).params({
type: 1,
result_type: 2
}).write({
file:{
filename: "te"
}})
统计值:triangle_count = 3
结果:文件 te
103,104,101
103,104,102
105,104,106
algo(triangle_counting).params({
type: 2,
result_type: 2
}).write({
file:{
filename: "tn"
}})
统计值:triangle_count = 2
结果:文件 tn
C4,C2,C1
C3,C2,C1
直接返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
0 | KV 或 []perTriangle | 三角形数量或构成三角形的点/边 | triangle_count 或 edge1 , edge2 , edge3 或 node1 , node2 , node3 |
algo(triangle_counting).params({
result_type: 1
}) as count
return count
结果:count
triangle_count |
---|
3 |
algo(triangle_counting).params({
result_type: 2
}) as triangles
return triangles
结果:triangles
edge1 | edge2 | edge3 |
---|---|---|
103 | 104 | 101 |
103 | 104 | 102 |
105 | 104 | 106 |
流式返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
0 | KV 或 []perTriangle | 三角形数量或构成三角形的点/边 | triangle_count 或 edge1 , edge2 , edge3 或 node1 , node2 , node3 |
algo(triangle_counting).params({
type: 2,
result_type:2
}).stream() as t
call {
with t
find().nodes({_uuid in [t.node1, t.node2, t.node3]}) as nodes
return sum(nodes.amount) as sumAmount
}
return table(t.node1, t.node2, t.node3, sumAmount)
结果:table(t.node1, t.node2, t.node3, sumAmount)
t.node1 | t.node2 | t.node3 | sumAmount |
---|---|---|---|
4 | 2 | 1 | 12 |
3 | 2 | 1 | 9 |
algo(triangle_counting).params({
type: 2,
result_type:1
}).stream() as tNodes
algo(triangle_counting).params({
type: 1,
result_type:1
}).stream() as tEdges
return table(tNodes.triangle_count, tEdges.triangle_count)
结果:table(tNodes.triangle_count, tEdges.triangle_count)
tNodes.triangle_count | tEdges.triangle_count |
---|---|
2 | 3 |
统计返回
别名序号 | 类型 | 描述 |
列名 |
---|---|---|---|
0 | KV | 三角形数量 | triangle_count |
algo(triangle_counting).params({
result_type: 1
}).stats() as sta
return sta
结果:sta
triangle_count |
---|
3 |