社交网络图挖掘4--三角形计数问题

来源:互联网 发布:java项目开发文档模板 编辑:程序博客网 时间:2024/06/01 22:43

计算一个随机图中的三角形数目期望值

由n个节点和m条边随机构成的图的中:

  1. 图中总共有(n3)=n3/6个三节点集合;
  2. 在任意给定的两个节点之间加入边的概率为m/(n2)=2m/n2
  3. 如果每条边的选择独立,那么任意三节点中包含三条边的概率为(2m/n2)3=8m3/n6
  4. 则该图的三角形期望数目为:
    (8m3/n6)(n3/6)=43(m/n)3

一个寻找三角形的算法

相关概念
假设一个图有n个节点m条边,其中m>n:
1.

  • 重节点(heavy hitter):如果一个节点的度不小于m,则该节点为重节点,重节点的数目不可能超过2m
  • 重节点三角形(heavy hitter triangle):如果某个三角形的三个顶点都是重节点,则该三角形为重节点三角形。

对图进行预处理:

  1. 计算每个节点的度,时间为O(m)
  2. 以边的两个端点作为键对边建立索引,即给定两个节点,通过索引就可以确定这两个节点之间是否有边。时间为O(m)
  3. 以边的单个端点作为键对边建立另一个索引,即给定节点v,返回该节点的邻接节点。

对节点进行排序:

  1. 首先按照节点的度排序,如果节点v的度小于节点u的度,则u<v
  2. 如果节点v的度等于节点u的度,则按照节点的编号谱排序,如果节点v的编号小于节点u的编号,则u<v

寻找重节点三角形:
考虑所有重节点中所有三节点集合,重节点三角形可能有O(m3/2)个,时间为O(m3/2)

寻找其他三角形:

  1. 考虑每条边(v1,v2),如果v1v2都为重节点则忽略这条边;但如果假定v1不是重节点并且有v1<v2,令u1,u2,...,uk为与v1相邻的节点,其中k<m,利用节点索引在O(1)时间内找到这些节点;
  2. 对于每个节点ui,利用边索引在O(1)时间内判断边(ui,v2)是否存在;
  3. 当且仅当边(ui,v2)存在,并且v1<ui 时,对三角形(ui,v2,ui)计数,时间为O(m3/2)

算法总时间为时间为O(m3/2)

原创粉丝点击