MapReduce之统计和列出大图中的三角形(一)

MapReduce之统计和列出大图中的所有三角形

什么是三角形

图作为一个数据结构,包括一个有限的节点集,称为顶点。包括一个有限的线集,称为边,边会连接其中一些或全部节点。令 T = ( a , b , c ) T=(a,b,c) T=(a,b,c)是图G中三个不同节点构成的一个集合,如果其中两个节点相连 ( a , b ) , ( a , c ) (a,b),(a,c) (a,b),(a,c), T T T就是一个三联体,如果所有三个节点都相连(a,b),(a,c),(b,c),这就是一个三角形

三角形的意义

在图论分析中,有三个很重要的度量参数:

  • 全局集聚系数
  • 传递比,即
         T ( G ) = 3 × ( 图 中 三 角 形 个 数 ) ( 互 连 的 顶 点 三 联 体 个 数 ) T(G)=\frac{3\times (图中三角形个数)}{(互连的顶点三联体个数)} T(G)=()3×()
  • 局部集聚系数
    要为一个大图计算这3个度量参数,必须要统计出图中三角形个数,在社交图中也具有广泛应用。
MapReduce解决方案

这个方案分为如下三步:

  • 1、生成经过u的长度为2的路径,并复制从u出发的所有边作为键。如下所示
             mapper: ( k , v ) → { ( k , v ) , ( v , k ) } (k,v)\rightarrow \{(k,v),(v,k)\} (k,v){(k,v),(v,k)}
        reducer: { ( k , v 1 ) , ( k , v 2 ) , … , ( k , v n ) } → { [ ( v 1 , v 2 ) , ( k ) ] , [ ( v 1 , v 3 ) , ( k ) } , … [ ( v n − 1 , v n ) , ( k ) ] , [ ( k , v 1 ) , ( − ) ] [ ( k , v 2 ) , ( − ) ] … [ ( k , v n ) , ( − ) ] \{(k,v_1),(k,v_2),\dots,(k,v_n)\}\rightarrow\{[(v_1,v_2),(k)], \\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad [(v_1,v_3),(k)\},\\\qquad\qquad\qquad\qquad\qquad \qquad\qquad \qquad \dots \\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad [(v_{n-1},v_n),(k)],\\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad [(k,v_1),(-)]\\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad [(k,v_2),(-)]\\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \dots \\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad [(k,v_n),(-)] {(k,v1),(k,v2),,(k,vn)}{[(v1,v2),(k)],[(v1,v3),(k)},[(vn1,vn),(k)],[(k,v1),()][(k,v2),()][(k,vn),()]

  • 2、判断三角形,表示为 { { u , v } , { v , w } , { w , u } } \{\{u,v\},\{v,w\},\{w,u\}\} {{u,v},{v,w},{w,u}},通过以下过程实现:

         mapper: [ ( u , v ) , ( w ) ] → [ ( u , v ) , ( w ) ] [(u,v),(w)]\rightarrow [(u,v),(w)] [(u,v),(w)][(u,v),(w)]
    reducer: { [ ( u , v ) , ( − ) ] , [ ( u , v ) , ( w 1 ) ] , … , [ ( u , v ) , ( w n ) ] → { [ ( u , v , w 1 ) ] , … , [ ( u , v , w n ) ] } \{[(u,v),(-)],[(u,v),(w_1)],\dots,[(u,v),(w_n)] \rightarrow \{[(u,v,w_1)],\\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \dots , \\\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad[(u,v,w_n)]\} {[(u,v),()],[(u,v),(w1)],,[(u,v),(wn)]{[(u,v,w1)],,[(u,v,wn)]}
    reducer: { [ ( u , v ) , ( − ) ] , [ ( u , v ) , ( w 1 ) ] , … , [ ( u , v ) , ( w n ) ] → N o O u t P w t } \{[(u,v),(-)],[(u,v),(w_1)],\dots,[(u,v),(w_n)] \rightarrow NoOutPwt\} {[(u,v),()],[(u,v),(w1)],,[(u,v),(wn)]NoOutPwt}

  • 3、删除重复的三角形[(a,b,c)等同于(a,c,b),如下所示

         mapper: ( k , v ) → ( s o r t ( k ) , v ) (k,v) \rightarrow (sort(k),v) (k,v)(sort(k),v)
    reducer: { ( k , v 1 , ) , ( k , v 2 ) , …   } → { ( k , n u l l ) } } \{ (k,v_1,),(k,v_2),\dots \} \rightarrow \{(k,null)\}\} {(k,v1,),(k,v2),}{(k,null)}}

在下一篇博客中,将详细展示详细代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值