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度度熊想去商场买一顶帽子, ...
随机推荐
- Razor视图引擎 语法学习
下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...
- 供应商API补充(详解EBS接口开发之供应商导入)(转)
原文地址 供应商导入的API补充(详解EBS接口开发之供应商导入) --供应商 --创建 AP_VENDOR_PUB_PKG.Create_Vendor ( p_api_version IN NUM ...
- POJ 3220 位运算+搜索
转载自:http://blog.csdn.net/lyhypacm/article/details/5813634 DES:相邻的两盏灯状态可以互换,给出初始状态.询问是否能在三步之内到达.如果能的话 ...
- 封装ajax函数
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- (转载)Hibernate的事务管理
Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...
- 玩转X-CTR100 l STM32F4 l BMP280气压计传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 扩展BMP ...
- LinkedStack<T>
public class LinkedStack<T> { private static class Node<U> { U item; Node<U> next; ...
- session进行增删改查操作
一般将针对数据库的操作放在事物里面, 开始事物:session.beginTransaction(); 获取事物:session.getTransaction(); 提交事物:transaction. ...
- Mysql数据库的读写分离
读写分离,即在主数据库中进行写操作(也可以进行增.删.改操作),在从数据库中进行读操作.在正常情况下,我们对主数据库进行的是增.删.改.查操作,数据库的写入时间比较长,而查询时间短,所以为了提高数据库 ...
- Ubuntu下安装、卸载notepad++
Ubuntu下的安装方法: sudo add-apt-repository ppa:notepadqq-team/notepadqq sudo apt-get update sudo apt-get ...