作者现就职阿里巴巴集团1688技术部

引言

周末看到一篇不错的文章“Graph Twiddling in a MapReduce world” ,介绍MapReduce下一些图算法的实现。文章语言质朴。介绍非常多有用图优化技巧。

文章2009年发表,至今已经被引用183次。足以证明这篇文章价值。眼下这篇文章网上已经有人对这篇文章做了介绍,但仅介绍了当中最简单的两个算法,对当中的所做优化,并没有做分析。

为了加深对文章算法的理解,我又一次对这篇文章的算法做了整理,同一时候加了自己的理解,以及算法在我们工作可能涉及的应用场景。鉴于“一图胜千言”的想法,我添加大量图片,以及实际样例演化算法流程,以增强对算法的理解。

介绍

MapReduce框架很适合处理大规模的流数据,而图算法的实现一直是MapReduce的难点。

已发表这方面的文章也不是特别多。依据“Graph Twiddling in a MapReduce world”,本文具体介绍了 四个图算法的实现。各自是

图节点度计算,三元环检測,四元环检測,k-桁结构(k-trusses)检測。

图节点度计算

度是图节点最主要的特征。在hadoop中求节点度的方法比較简单。以图1为例,须要求当中各个节点的度。
Hadoop算法实现很easy,例如以下图2所演示
MapReduce-1: 分别以边的两个节点作为key。边作为键值输出,reducer阶段统计节点关联的边个数,同一时候输出边中对应节点的度;
MapReduce-2:以MapReduce-1的输出作为输入,reducer阶段合并边上两个节点的度。

三元环检測

三元环检測主要思想是先查找全部开三元环(相当于三个节点形成一条链),然后一条边能否够将这个开三元环闭合(即是否有一条边能够将链的两个端点闭合)。
这里有两个优化点,能够大大提供算法性能。 首先,为了减少计算复杂度,一个三元环,我们仅仅输出一次。假设对三元环中节点排序(最简单的办法就是节点按字母排序),通过逆序或者旋转三元环的节点输出顺序仅仅有一种(比如ABC,BAC, CBA, ACB… 都能够由ABC逆序或者旋转得到)。

因为这个性质,每轮mapper reducer过程,输出时候保证节点是按顺序的。 其次,二次爆炸问题,当某一个节点度比較高的时候,那么通过这个节点边就会非常多。进而形成的开三元环也会比較多(比如,节点A的度为N。那么通过节点A边有N条边,这N条边随意两条都能够形成一个开三元环,终于A节点将形成N(N-1)/2 个开三元环,当N非常大时候性能会有非常大影响)。一个解决的方法是,使用度较小的节点为key做合并,这样数据被分散到度比較小的节点上。

(结合上面的性质,三元环节点序是仅仅有一种,所以不会出现有些三元环没找到的情况)。这两个优化点能大大提高算法性能。

我们以第一节中的图1为例,详细的hadoop算法流程例如以下

检測三元环算法包括两个MapReducer过程:

  • MapReducer-1

    • Mapper:

      • input: 带有度的边
      • output: 以边中度较小的节点为key。边为键值输出。【减少二次爆炸问题】
    • Reducer:
      • process:合并节点的开三元环。
      • output:输出开三元环,输出时候按三元环两端节点字母排序输出。【保证输出顺序】
  • MapReducer-2
    • Mapper:

      • input:a) 全部带有度的边,按字母顺序输出; b) MapReduce-1中产生的全部开三元环;
      • output:输出边 和开三元环;
    • Reducer:
      • process: 推断是否,一条边能将开三元环闭合;可以闭合则是一个三元环;
      • output: 输出全部三元环

四元环检測

四元环检測基本思想与检測三元环类似。

能够先找两个开三元环,假设两个开三元环连接同样的两个端点,那么这两个开三元环组成一个四元环。为了降低计算量。我们先分析一下四元环旋转和逆序的性质。

先从三元环说起,前面已经提到了。假如三元环顶点有序。那么通过旋转和逆序三元环的顺序是唯一的(ABC,BCA。CAB。CBA,ACB,BAC都能够通过ABC旋转或者逆序得到)。

对于四元环四个顶点(A,B。C。D)。四个顶点的排列方式有4!=24中,可是通过旋转和逆序仅仅有三种排列方式 (排序方法最简单就是按字母顺序排序)。

如图4所看到的。我们继续对上面四元环进行分析。依据当中三元环顶点与其邻居节点的关系。我们对上面三个四元环进行分类。首先(a)中两个开三元环(蓝色)的顶点(A,B)比它们相邻的节点(C,D)都小。(b)中两个开三元环(蓝色和黑色),黑色开三元环顶点小于它邻居节点。蓝色开三元环的顶点在邻居节点中间;(c)中两个开三元环(黑色),顶点都在邻居节点中间。所以四元环能够分解成两种三元环的组合:一种三元环。其顶点在两个邻居节点中间,一种三元环。其顶点比邻居节点小。通过这种策略我们降低开三元环的输出,降低算法的复杂度,后面我们将看到这个策略的应用。

四元环检測算法例如以下:
a) mapper输入全部的边,分别以边节点为key。边为value的键值,同一时候对键值对进行标注,标记输出的节点的字母排序(或者其它排序)大小。比如,处理边AF时候, mapper输出值有两个键值对,<A,(AF),L> <F,(AF),H>。第一个值表示key A,键值 AF。L表示A < F (字母序); 第二个值表示key F。键值AF。H表示 F>A(字母序);

b) reducer 处理全部节点相应的开三元环 ,这里注意我们输出两种开三元环:(I)输出节点关联的随意两个L键值对组成的开三元环 (比如。图中C,F相应的两个L键值对,他们组成的开三元环都要输出。假设有三个对以上的L 键值,随意两对组成的开三元环都要输出)。(II)输出节点随意一个L键值对和全部的H键值组成的开三元环(比如图中D,F节点)。 【这里就是为什么上面我们分析四元环的组成。由于随意一个四元环仅仅能分解成。两种情况顶点小于两个相邻节点,顶点在两个相邻节点中间。两个L键值对表示的就是顶点小于两个相邻节点。一个L键值和一个H键值表示就是顶点在两个相邻节点中间】

c) 最后一个Reducer就是分析是否两个开三元环的顶点不一样。可是端点一致;是则是四元环;否则不是。

算法流程能够见下图5

k-trusses 结构检測

k-trusses 桁结构的定义是:a relaxation of a kmember clique and is a nontrivial, single-component maximal subgraph, such that every edge is contained in at least k -2 triangles in the subgraph. 详细理解。桁结构中是由三角结构组成的平面或者立体结构。例如以下图中(a)是一个4-trusses。而(b)不是4-trusses;(b)是两个3-trusses。桁结构有非常多力学性质。在网络社区发现等算法中k-trusses也常常被觉得是一簇紧密相连的节点,能够聚为一类。以下我们就来介绍一下。通过hadoop框架来实现k-trusses结构检測的问题。


从上面定义能够发现事实上寻找k-trusses问题能够转化为查找三元环问题。

同一时候。因为k-trusses的边满足支撑条件(即k-trusses中的边至少属于k-2 triangles),能够考虑每次删除图中不满足支撑条件的边。检验剩下的图中边是否还满足支撑条件,不断迭代。

假设将全部不满足支撑条件的边都去掉,图中剩余的component。就是k-trusses。详细算法例如以下:

  • 1) 计算边的度。检測出全部的三元环
  • 2) 输出三元环全部边,记录边所在三元环的个数。
  • 3) 保留满足支撑条件的边;
  • 4) 假设step 4 删除某些边,那么goto step1
  • 5) 剩下图中的components。每个都是k-trusses

当中step 3,4 是一个MapReducer过程。

详细计算步骤例如以下,假如初始图例如以下。我们要做4-trusses检測:

  • 1) 计算节点度,检測三元环;
  • 2) step 3, step 4 为一个MapReduce过程,演示示意图例如以下图6。

  • 3) Reducer过程中去掉了一些边。那么回到step1,又一次对剩下的边做三元环检測,看剩下的边是否满足支撑条件。例如以下图所看到的,这时我们发现剩下的边组成例如以下的图,由此我们推理出trusses检測算法的主要流程,最后满足支撑条件的边都能构成4-trusses。

參考资料
Graph Twiddling in a MapReduce world

基于mapreducer的图算法相关推荐

  1. Paper Note - SLEUTH:基于COTS审计数据的实时攻击场景重构

    文章目录 1 摘要 2 介绍 2.1 方法概览 2.2 贡献 2.2.1 基于内存的依赖图表示 2.2.2 基于标签 2.2.3 利用标签进行溯源和影响性分析 2.2.4 可定制的策略框架 2.2.5 ...

  2. 图算法之节点分类Node Classification

    前言 在图谱当中,有一项很重要的任务,节点分类.该任务通常是给定图中某些节点对应的类别,从而预测出生于没有标签的节点属于哪一个类别,该任务也被称为半监督节点分类. 本文主要介绍三种图算法来解决节点分类 ...

  3. 实时智能决策引擎在蚂蚁金服风险管理中的实践

    摘要:以"数字金融新原力(The New Force of Digital Finance)"为主题,蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办.金融智能专场分论坛上 ...

  4. 模型可解释性技术概览

    XAI系列二:模型可解释性技术概览 传统网络安全威胁分析依赖专家知识及基本的数据分析,然而随着攻击技术的复杂化.安全数据接入的多元化,高性能人工智能技术越来越多的应用到威胁分析中,试图解放安全行业的生 ...

  5. 亿级用户百TB级数据的 AIOps 技术实践之路(增强版)

    作者简介 周荣,华为消费者BG云运维部 AIOps 负责人,GOPS 2018 深圳站金牌讲师,07年加入华为,先后分别负责下一代智能网.中间件平台.运维工具等产品的研发与规划,在分布式系统.大数据分 ...

  6. 实时智能决策引擎在蚂蚁金服风险管理中的实践 1

    摘要:以"数字金融新原力(The New Force of Digital Finance)"为主题,蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办.金融智能专场分论坛上 ...

  7. 你看到这波红包封皮背后的智慧了吗?

    提前关注我,精彩不迷路! 春节档热文: 有刘谦的春晚去哪了? 王良:你牛(有趣又特别的牛年祝福) 我好喜欢这些红包封皮啊! 先给大家看看我们MatheMagician的专属封皮! 图1 MatheMa ...

  8. 搜索技术——盲目与启发

    如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔空间 搜索是人工智能中的一个基本问题,并与推理密切相关.搜索策略的优劣将直接影响到智能系统的性能与推理效率. 一:搜索的基本概念 搜索:根据问题 ...

  9. 微信扫一扫背后的秘密:基于运动估计的智能传图算法

    一.项目背景 图1.1 常见的图像识别应用 本项目提出的图像算法主要解决如下问题:在移动设备实时获取图像的过程中,让算法自动决定何时进行图片发送请求.何时中断发送请求,并将此策略用在实时的图像检索应用 ...

最新文章

  1. 详解@EnableEurekaServer和@EnableDiscoveryClient 或 @EnableEurekaClient注解
  2. 【PC工具】更新百度网盘高速下载工具——亿寻使用方法及注意事项
  3. HTML5-WebSocket实现对服务器CPU实时监控
  4. pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
  5. List实现类中调用下标删除VS调用元素删除
  6. 心​理​学​家​告​诉​你​:​男​女​怎​样​才​叫​合​适
  7. Bootstrap 调用插件
  8. python 网站模板_使用Python抓取模板之家的CSS模板
  9. SAP License:谁能透露你的信息
  10. 怎么搭建服务器集成环境配置文件,怎么搭建服务器集成环境配置文件
  11. emu8086的入门使用
  12. python十六进制转pcap文件_python处理pcap文件——数据提取
  13. mess组网 中继_Mesh中继模式,哪个联网比较好?
  14. 【JZOJ6287】扭动的树
  15. 使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)
  16. 阿里云部署.NET后端
  17. 寻声定位 matlab,春天里的小情趣
  18. 十分钟写一个好玩的app
  19. analogWrite怎么做PWM输出?改PWM频率(定时器相关)
  20. Quorum企业以太坊搭建区块链记录系列

热门文章

  1. cisco 增强型内部网关路由协议EIGRP笔记
  2. C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
  3. 点击一下,即可在 Windows 10 实现路过式远程代码执行,未修复
  4. 微软:确实存在另一枚 print spooler 0day,目前尚未修复
  5. 接管任意微软账户并获$5万赏金的故事
  6. Kramdown 配置不当引发 GitHub Pages 多个 RCE,得 $2.5万($6.1万系列之二)
  7. 超越界限,定义未来-- HP刀片工作站WS460c Gen9无惧4K挑战
  8. ReactiveCocoa入门教程--第二部分
  9. 趣图:21 副 GIF 动图让你了解各种数学概念
  10. CentOS _ RHEL 防止Kernel升级