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

孤街浪徒 提交于 2019-12-30 00:36:47

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

什么是三角形

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

三角形的意义

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

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

MapReduce解决方案

这个方案分为如下三步:

  • 1、生成经过u的长度为2的路径,并复制从u出发的所有边作为键。如下所示
             mapper: (k,v){(k,v),(v,k)}(k,v)\rightarrow \{(k,v),(v,k)\}
        reducer:{(k,v1),(k,v2),,(k,vn)}{[(v1,v2),(k)],[(v1,v3),(k)},[(vn1,vn),(k)],[(k,v1),()][(k,v2),()][(k,vn),()]\{(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),(-)]

  • 2、判断三角形,表示为{{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)]
    reducer:{[(u,v),()],[(u,v),(w1)],,[(u,v),(wn)]{[(u,v,w1)],,[(u,v,wn)]}\{[(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)]\}
    reducer:{[(u,v),()],[(u,v),(w1)],,[(u,v),(wn)]NoOutPwt}\{[(u,v),(-)],[(u,v),(w_1)],\dots,[(u,v),(w_n)] \rightarrow NoOutPwt\}

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

         mapper: (k,v)(sort(k),v)(k,v) \rightarrow (sort(k),v)
    reducer: {(k,v1,),(k,v2),}{(k,null)}}\{ (k,v_1,),(k,v_2),\dots \} \rightarrow \{(k,null)\}\}

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!