Graphx的数三角形算法TriangleCount用于统计每个顶点所在的三角形个数。
1.1 简介
对网络图中进行三角形个数计数可以根据三角形数量反应网络中的稠密程度和质量。
1.2 应用场景
(一)用于社区发现
如微博中你关注的人也关注你,大家的关注关系中有很多三角形,说明社区很强很稳定,大家联系比较紧密;如果一个人只关注了很多人,却没有形成三角形,则说明社交群体很小很松散。
(二)衡量社群耦合关系的紧密程度
通过三角形数量来反应社区内部的紧密程度,作为一项参考指标。
1.3 算法思路
计算规则:
如果一条边的两个顶点有共同的邻居,则这三个点构成三角形。
计算步骤:
1. 为每个节点计算邻居集合
2. 对于每条边,计算两端节点邻居集合的交集,将交集中元素个数告知两端节点,
该个数即对应着节点关联的三角形数。
3. 对每个节点合并三角形数目统计总数,由于三角形中一个顶点关联两条边,所以
对于同一个三角形而言,一个顶点计算了两次,故最终结果需要除以2。
1.4 源码解析
object TriangleCount {
def run[VD: ClassTag, ED: ClassTag](graph: Graph[VD, ED]): Graph[Int, ED] = {
// Transform the edge data something cheap to shuffle and then canonicalize
//得到的是一个无自连边且无重复边的