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度度熊想去商场买一顶帽子, ...
随机推荐
- 最齐全的Android studio 快捷键(亲测可用)
Action Mac OSX Win/Linux 注释代码(//) Cmd + / Ctrl + / 注释代码(/**/) Cmd + Option + / Ctrl + Alt + / 格式化代码 ...
- Get和Load的区别----hibernate
Get和Load的区别
- Oracle12c新特性之基本操作
1. 服务器端连接并启动数据库: sqlplus / as sysdba startup; 2. 服务器端连接并关闭数据库: sqlplus / as sysdba shutdown immedi ...
- spring boot 学习(七)小工具篇:表单重复提交
注解 + 拦截器:解决表单重复提交 前言 学习 Spring Boot 中,我想将我在项目中添加几个我在 SpringMVC 框架中常用的工具类(主要都是涉及到 Spring AOP 部分知识).比如 ...
- 怎样设置IIS6.0的闲置超时时间
打开IIS 信息服务管理器 1)打开IIS,点击应用程序池 2)找到Bs项目使用具体程序池(DspTest) 3)右键属性找到高级设置-- 进程模型 -- 闲置超时 4)设置闲置超时时间(默认为20分 ...
- SQL中游标的使用(转)
http://www.cnblogs.com/tianguook/archive/2011/03/09/1977987.html 一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言, ...
- 读书笔记 C# 控制台应用程序之Main方法浅析
Main方法是C#控制台应用程序和Windows窗体应用程序的入口点.Main方法可以有形参,也可以没有,可以有返回值(int整型),也可以没有.如下定义: 无返回值.无形参的格式: static v ...
- TwoSum:两数相加得0
在一个不重复的数组中,统计有多少组两个元素相加得0. 这里使用三种方式实现,并统计他们各自花费的时间: import java.util.Arrays; import java.util.HashMa ...
- 用virtualbox虚拟机无法上网的解决方法
用virtualbox虚拟机无法上网的解决方法 首先保证你的本机是可以正常上网的 启动虚拟机系统前,选择安装好的虚拟PC,点击"设置"按钮,然后切到"网络&quo ...
- IntelliJ IDEA 2017.01配置jdk和tomcat
之前开发Web项目都是用myeclipse或者eclipse,最近想用IDEA这个编辑器去配置一个Web项目,因为是新手,加上对界面的操作不熟练,所以在配置的过程中遇到了一些难题.最后配置成功,并且可 ...