MapReduce-寻找三角形
在图中,如何判断三角形?三角形在很多场景都有应用,比如社交网络中确定人和人之间的关系。
那么如果通过代码逻辑来实现呢?在数据结构之图中,区分三联体(有一端没有关联关系的三角形)和三角形是关键;两者之间的差别在于边的"度",如果>=2,则可以断定点和边的关系是三角形。为什么度要>=2呢?因为如果一条边是三角形的边,冲要件是:
1)这条边是存在的(三联体里面允许一条边不存在);

2)这条边至少有一个节点和他连接;

所以度>=2的涵义就是满足了这两个条件;
那么算法中一般怎么实现?
基本的思路是当前边角的关系以数字集合的方式传递到map中,map1的处理就是讲传入的无向的两点关系转化为有向的关系,比如传入1-2,那么经过map处理就会变成两条记录(1,2),(2,1),这样处理的目的是为了reduce1阶段的处理能够形成各个点都和哪些点有关联关系;这些点也解决了上述的第一个问题:边的存在性;
map1阶段的输出会形成点和哪些点有关联关系,例如:
1, [2] # 点1和点2以及点3有关联关系
2, [1,3,4,5]
reduce1阶段会继续根据上述的输入数据进行处理,形成边和点的关系:
[1], [2] → [(1,2), (-)]
[2], [1,3,4,5] → [(2,1), (-)]
[(2,3), (-)]
...
[(1,3), (2)]
[(1,4), (2)]
第一个阶段即使要形成这样的数据,能够确定点和那些点有关联关系;注意reduce1的输出中,但凡是标记为"-"的代表是边的存在性,而且key值一定存在于map1过程的边对应关系中;
下面是第二个阶段,第二个阶段主要是根据点的关系来获取边和点的关系;根据我们上面讲到的三角形的充要条件是度>=2,所以在第二个阶段map2是恒等处理,在reduce2中会根据上面的数据,对于key进行groupby,整理出各条边的关联的点,如果和某条边关联的点>=2,则说明三角形存在,可以获取三角形:
(2,3), [-, 4] → 可以推测出有三角形2,3,4(其中"-"代表点2到点3的连线是存在的,4代表有一个点和线段2-3都关联,于是推测出这是一个三角形)
最后一个步骤是去重,reduce2中获取的三角形是重复的(每个都有两个),于是需要点位置进行排序,删除重复的三角形。
MapReduce-寻找三角形的更多相关文章
- 第2个C# Winform实例,寻找三角形的位置
这里,在第一个例子的基础上,稍微做修改,达到最终定位三角形位置的目的. 先在网络上找一张包含有三角形的图片,我们这里使用一张有三个三角形和一些标记的图片来处理. 原图: 先贴结果图片:左侧,中间,右侧 ...
- MapReduce寻找共同好友
1.测试文件 A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E ...
- POJ 2420 A Star not a Tree? (计算几何-费马点)
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3435 Accepted: 172 ...
- C++ 基于凸包的Delaunay三角网生成算法
Delaunay三角网,写了用半天,调试BUG用了2天……醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ...
- 维诺图(Voronoi Diagram)分析与实现(转)
一.问题描述1.Voronoi图的定义又叫泰森多边形或Dirichlet图,它是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成. 2.Voronoi图的特点(1)每个V多边形内有一个生成元: ...
- HDU3629(凸四边形的个数)
HDU 3629 计算几何 题目描述:给你n个点(4~700), 问你能够成多少个不同的凸四边形. 解题报告: 暴力的话C(700,4)必然超时,发现,任何一个凹包必然是其中一点在其它3点构成的三角形 ...
- Java学习---程序设计_面试题[2]
百度2017春招笔试真题编程题集合之买帽子 // 2017-10-09 // 题目描述 // 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同.度度熊想买一顶价格第三便宜的帽子,问第 ...
- [LeetCode 题解]: Triangle
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a tr ...
- 大红数星星 图论 XD网络赛
问题 A: 大红数星星 时间限制: 3 Sec 内存限制: 128 MB提交: 1066 解决: 67[提交][状态][讨论版] 题目描述 “三角形十分的美丽,相信大家小学就学过三角形具有稳定性, ...
- 转载:2017百度春季实习生五道编程题[全AC]
装载至:https://blog.csdn.net/zmdsjtu/article/details/70880761 1[编程题]买帽子 时间限制:1秒空间限制:32768K度度熊想去商场买一顶帽子, ...
随机推荐
- 生成图片验证码(.NET)
一.生成随机字符串 方法一: public string CreateRandomCode(int codeCount) { string allChar = "0,1,2,3,4,5,6, ...
- PaodingAnalysis 提示 "dic home should not be a file, but a directory"
Exception in thread "main" net.paoding.analysis.exception.PaodingAnalysisException: dic ho ...
- HttpServletResponse输出的中文乱码
HttpServletResponse输出有两种格式,一种是字符流,一种是字节流. 1.字符流 // 这句话的意思,是让浏览器用utf8来解析返回的数据,即设置客户端解析的编码 response.se ...
- SQL优化(SQL TUNING)可大幅提升性能的实战技巧之一——让计划沿着索引跑
我们进行SQL优化时,经常会碰到对大量数据集进行排序,然后从排序后的集合取前部分结果的需求,这种情况下,当我们按照常规思路去写SQL时,系统会先读取过滤获得所有集合,然后进行排序,再从排序结果取出极少 ...
- SecureCRT的脚本+快捷键设置
场景描述: 每次输入命令对远程svn进行提交非常麻烦,原来SecureCRT有脚本录制函数,类似于Excel的宏录制. 解决方法: 在菜单=>script=>start recording ...
- linux系统管理的基本命令
系统管理类命令: 关机或重启: halt, poweroff reboot -f: 强制,不调用shutdown -p: 切断电源 shutdown: shutdown [OPTION]... TIM ...
- wavepicking
http://www.seismology.harvard.edu/research/wavePicking.html
- net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法
解决问题方法如下: 在dos下运行net start mysql 不能启动mysql!提示发生系统错误 5:拒绝访问!切换到管理员模式就可以启动了.所以我们要以管理员身份来运行cmd程序来启动mys ...
- jsx介绍
jsx与传统的html的区别: 1. jsx:使用的“元素”不局限与html中的元素,可以是任何一个React组件,传统的html是做不到的 (区分是否是组件的原则:看第一个字母是否是大写) 2.js ...
- B+与B-树
1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少 ...