概述
k-Core算法能识别图中最大的连通子图,其中所有节点的度不小于 k。它常用来识别和提取图中紧密连通的群组,以便做进一步分析。该算法广泛应用于金融风险控制、社交网络分析和生物学等多个研究领域。k-Core算法的主要优势之一是时间复杂度低(线性),因此能高效地处理大型图。此外,k-Core生成的子图具有良好的直观可解释性,有助于理解图的结构模式和关系。
普遍接受的k-Core概念最早是由Seidman提出的:
- S.B. Seidman, Network Structure And Minimum Degree. Soc Netw 5:269-287 (1983)
基本概念
k-Core
图的k-Core子图是通过迭代剪枝过程得到的。从原图开始,按顺序反复从图中去掉度小于k的节点,直到剩余节点的度均大于或等于k。
以下是获取图的3-core子图的修剪过程。在第一轮中,度数小于3的节点{a, d, f}被移除,这影响到节点b在第二轮中被移除。第二轮之后,所有剩余节点的度数都不少于3,因此修剪过程结束,该图的3-core是由节点{c, e, g, h}诱导的。
嬴图的k-Core算法识别图中每个连通分量的k-core子图。
特殊说明
- k-Core算法忽略图中的自环边。在计算相应节点的度时,不考虑它的自环边。
- k-Core算法忽略边的方向,按照无向边进行计算。
语法
- 命令:
algo(k_core)
- 参数:
名称 |
类型 |
规范 |
默认 |
可选 |
描述 |
---|---|---|---|---|---|
k | int | ≥1 | / | 否 | k-Core中每个节点的度都大于等于k |
示例
示例图如下:
文件回写
配置项 |
回写内容 |
描述 |
---|---|---|
filename | _id |
k-Core中节点的ID |
algo(k_core).params({
k: 3
}).write({
file:{
filename: '3-core'
}
})
结果:文件3-core
G
F
E
D
直接返回
别名序号 |
类型 |
描述 |
---|---|---|
0 | []perNode | k-Core中节点的UUID |
algo(k_core).params({
k: 2
}) as k2
return k2
结果:k2
7 |
6 |
5 |
4 |
2 |
3 |
流式返回
别名序号 |
类型 |
描述 |
---|---|---|
0 | []perNode | k-Core中节点的UUID |
algo(k_core).params({
k: 2
}).stream() as k2
find().nodes(k2) as nodes
return nodes{*}
结果:nodes
_id | _uuid |
---|---|
G | 7 |
F | 6 |
E | 5 |
D | 4 |
C | 2 |
B | 3 |