给定一个无向图,求出此图中包含三角形的个数。
图中三角形指的是:在图中任意选择三个顶点,且这三个顶点之间任意两个点都有一条来自原图中的边。求出图中三角形个数有许多应用(1)在qq中两个好友之间的共同好友个数(2)好友推荐应用。(3)图的聚集系数。(4)小世界网络。
本文中所给出的算法思想:
1.对图中的所有顶点按照度数由小到大进行排序。
2.计算图中每个顶点的A[v]集合。A[v]满足(1)集合中的元素是v的邻接点(2)排名在顶点v之后。此步骤可以保证每个三角形只被计算一次。
3.对图中每条边(u,v)进行遍历,每访问一条边(u,v),求出A[v]和A[u]的交集。累计每条边的交集个数。最后交集的个数即图中三角形的个数。
如下图所示:
(1)顶点按照度数由小到大进行排序{2,0,4,3,1}。
(2)求出每个顶点的A[v]集合。A[0]={1,3}、A[1]={}、A[2]={1}、A[3]={1}以及A[4]={1,3}。
(3)求出每条边(u,v)中A[u]和A[v]的交集中元素的个数:(A[0],A[3])=1和(A[4],A[3])=1。