/TriangleCount

hadoop计算图中三角形个数

Primary LanguageJava

TriangleCount

hadoop计算图中三角形个数

一个社交网络可以看做是一张图(离散数学中的图)。社交网络中的人对应于图的顶点;社交网络中的人际关系对应于图中的边。在本次实验任务中,我们只考虑一种关系——用户之 间的关注关系。假设“王五”在Twitter/微博中关注了“李四”,则在社交网络图中,有一条对应的从“王五”指向“李四”的有向边。

实验任务

在给定的社交网络图中,统计图中所有三角形的数量。

在统计前,需要先进行有向边到无向边的转换,依据如下逻辑转换:

IF ( A→B) OR (B→A) THEN A-B

“A→B”表示从顶点A 到顶点B 有一条有向边。A-B 表示顶点A 和顶点B 之间有一条无向边。

输入格式

输入数据仅一个文件。该文件由若干行组成,每一行由两个以空格分隔的整数组成:A B

A,B 分别是两个顶点的ID。这一行记录表示图中具有一条由A 到B 的有向边。整个图的结构由该文件唯一确定。

文件示例

87982906 17975898

17809581 35664799

524620711 270231980

247583674 230498574

348281617 255810948

159294262 230766095

14927205 5380672

……

实验思路

利用矩阵相乘,先得到该图的邻接表A。然后用矩阵A自乘矩阵A,再用矩阵A自乘矩阵A。

相乘两次后得到的矩阵 M主对角线上的数字即表示从某一顶点出发经过两条边再回到该顶点的路径数目。由于有重复计算,因此相乘后主对角线上所有数字相加再除以6(三角形有三个顶点,每个顶点有两种方向遍历该三角形,因此除以6)就是该图中所有三角形的个数。