建图方法

https://wenku.baidu.com/view/63c1a01655270722192ef7c3.html

性质

http://dsqiu.iteye.com/blog/1689505
前段时间系统的学习了一下二分图匹配,收获还是蛮大的,总算是把最大匹配、点覆盖、点独立、边覆盖什么的关系搞清楚了,基本的算法和定理都会了,剩下的就是建模问题了,这个只能慢慢积累了,最后写个小结。

一、二分图最大匹配
定义:匹配是图中一些边的集合,且集合中任意两条边都没有公共点,所有的匹配中,边数最多的就是最大匹配。
算法:用匈牙利算法可以在O(V*E)的复杂度内求出二分图的最大匹配,具体可以看byvoid神犇的blog,讲的很详细,不过想真正完全证明这个算法,得去看组合数学。

二、二分图最小点覆盖
定义:点覆盖是图中一些点的集合,且对于图中所有的边,至少有一个端点属于点覆盖,点数最小的覆盖就是最小点覆盖。
定理:最小点覆盖=最大匹配。
简单证明:首先必然有,最小覆盖>=最大匹配。于是只要证明不等式可以取等号,我们可在最大匹配的基础上构造出一组点覆盖。对右边每一个未匹配的点进行dfs找增广路,标记所有dfs过程中访问到的点,左边标记的点+右边未标记的点就是这个图的一个点覆盖。因为对于任意一条边,如果他的左边没标记,右边被标记了,那么我们就可找到一条新的增广路,所以每一条边都至少被一个点覆盖。再来证明:最大匹配=左边标记的点+右边未标记的点。对于每条匹配边,只有一个点属于点覆盖。如果这条边在dfs过程中被访问了,那么就左端点属于点覆盖,右端点不属于,否则就有左端点不属于点覆盖,右端点属于点覆盖。除此之外,不可能存在其它的点属于最小覆盖了,不然就必然可以找到增广路。所以:左边标记的点+右边未标记的点=最大匹配,对于任意的二分图,我们总能在最大匹配的基础上构造出一组点数等于最大匹配的点覆盖,所以:最小点覆盖=最大匹配。

三、二分图最小边覆盖
定义:边覆盖是图中一些边的集合,且对于图中所有的点,至少有一条集合中的边与其相关联,边数最小的覆盖就是最小边覆盖。
定理:最小边覆盖=图中点的个数-最大匹配。
简单证明:先贪心的选一组最大匹配的边加入集合,对于剩下的每个未匹配的点,随便选一条与之关联的边加入集合,得到的集合就是最小边覆盖,所以有:最小边覆盖=最大匹配+图中点的个数-2*最大匹配=图中点的个数-最大匹配。

四、二分图最大独立集
定义:独立集是图中一些点的集合,且图中任意两点之间都不存在边,点数最大的就是最大独立集。
定理:最大独立集=图中点的个数-最大匹配。
简单证明:可以这样来理解,先把所有的点都加入集合,删除最少的点和与其关联的边使得剩下的点相互之间不存在边,我们就得到了最大独立集。所以有:最大独立集=图中点的个数-最小点覆盖=图中点的个数-最大匹配。

五、有向无环图最小不相交路径覆盖
定义:用最少的不相交路径覆盖所有顶点。
定理:把原图中的每个点V拆成Vx和Vy,如果有一条有向边A->B,那么就加边Ax-By。这样就得到了一个二分图,最小路径覆盖=原图的节点数-新图最大匹配。
简单证明:一开始每个点都独立的为一条路径,总共有n条不相交路径。我们每次在二分图里加一条边就相当于把两条路径合成了一条路径,因为路径之间不能有公共点,所以加的边之间也不能有公共点,这就是匹配的定义。所以有:最小路径覆盖=原图的节点数-新图最大匹配。

六、有向无环图最小可相交路径覆盖
定义:用最小的可相交路径覆盖所有顶点。
算法:先用floyd求出原图的传递闭包,即如果a到b有路,那么就加边a->b。然后就转化成了最小不相交路径覆盖问题。

七、偏序集的最大反链
定义:偏序集中的最大独立集。
Dilworth定理:对于任意偏序集都有,最大独立集(最大反链)=最小链的划分(最小不相交路径覆盖)。
通过Dilworth定理,我们就可以把偏序集的最大独立集问题转化为最小不相交路径覆盖问题了。

八、二分图带权最大匹配
定义:每个边都有一组权值,边权之和最大的匹配就是带权最大匹配。
算法:KM算法,复杂度为O(V^3)。具体就不说了,网上有不少资料。
要注意的是,KM算法求的是最佳匹配,即在匹配是完备的基础上权值之和最大。这和带权最大匹配是不一样的,不过我们可以加入若干条边权为0的边使得KM求出来的最佳匹配等于最大权匹配。具体实现的时候最好用矩阵来存图,因为一般点的个数都是10^2级别,并且这样默认任意两点之间都存在边权为0的边,写起来很方便。如果要求最小权匹配,我们可以用一个很大数减去每条边的边权。

转载于:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8275958.html

二分图常用建图方法及其性质相关推荐

  1. 二分图最大匹配及常用建图方法

    算法---艺术 二分图匹配剖析 很多人说,算法是一种艺术.但是对于初学者的我,对算法认识不是很深刻,但偶尔也能感受到他强大的魅力与活力. 这让我追求算法的脚步不能停止.下面我通过分析匈牙利算法以及常用 ...

  2. LIOM: 一种新的激光惯性里程计和建图方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:robot L | 来源:知乎 https://zhuanlan.zhihu.com/p/137 ...

  3. orb特征 稠密特征_一种基于ORB-SLAM2的双目三维稠密建图方法技术

    本发明专利技术公开了一种基于ORB‑SLAM2的双目稠密建图方法,涉及机器人同步定位与地图创建领域,该方法主要由跟踪线程.局部地图线程.闭环检测线程和稠密建图线程组成.其中稠密建图线程包含以下步骤:1 ...

  4. POJ2446-Chessboard【最大匹配,二分图,奇偶建图】

    正题 大意 一个n*m的棋盘上有k个洞,将1*2的木条放在上面,不能铺在洞上,不能重叠,求能不能铺满整个棋盘. 解题思路 用点来建立二分图,然后求最大匹配. 但是奇偶建图会快两倍.奇偶建图就是相邻的块 ...

  5. 视觉slam中的一种单目稠密建图方法

    之所以只讲单目的稠密建图,这是因为,首先,对于RGBD图,我们已知所有点的深度,可以直接生成稠密的点云.其次,对于稀疏地图,其实很多VO中已经完成了稀疏地图的构建,但是稀疏地图只能用于定位,不能用于导 ...

  6. 【HDU - 4185】Oil Skimming (二分图,建图,匈牙利算法)

    题干: Thanks to a certain "green" resources company, there is a new profitable industry of o ...

  7. 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic

    inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...

  8. 机器人建图的一些方法总结

    目录 写在前面 经典地图表示方法 1.Voxel (Occupancy grid map) 2.Mesh 3.Surfel 4.OctoMap 5.Voxel Hashing 6.TSDF 7.ESD ...

  9. P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4619 [SDOI2018]旧试题(莫比乌斯反演,三元环计数) Problem 计算: ∑i=1A ...

最新文章

  1. boost::hana::second用法的测试程序
  2. mysql 事务sqlserver_MYSQL高级特性 -- 事务处理_sqlserver
  3. 使用pip安装virtualenv时出现问题
  4. Sublime Text 3 快捷键总结(简洁版本)
  5. MySql的Delete、Truncate、Drop分析
  6. 单片机和微型计算机硬件组成的异同,嵌入式和单片机的区别是什么?两者有什么联系...
  7. leetcode932.BeautifulArray
  8. java面试之闭包(closure)
  9. oracle清空回收站指定表,清空Oracle 10g回收站中以BIN$开头的表
  10. 【Uniapp】Uniapp 实现 App 版本自动升级
  11. [转载]JTree 编辑、删除、添加节点_-Chaz-_新浪博客
  12. spring boot项目:用户中心的商品信息编辑功能
  13. java定时从数据库抓取数据库,java查询数据库java如何实现定时从数据库查询新增的数据?...
  14. MessageBox 按钮显示英文或其他语言
  15. 使用百度云主机的GPU主机教程_第一部分
  16. C++:N阶楼梯上楼问题
  17. poi读取excel多层表头模板写入数据并导出
  18. java实验报告:实验一 基于控制台的购书系统
  19. 国产Linux系统Deepin操作系统面临重重困境,创始人兼CTO已离职
  20. 如何给宝宝起个好名?三点原则!起名有道,不可随意!

热门文章

  1. BugkuCTF-Misc:come_game
  2. JAVA——Map基础知识
  3. Docker启动失败 提示An error occurred和乱码
  4. Redundant Binary Upload. There already exists a bi
  5. SpringBoot注解大全
  6. Android Apk增量更新
  7. 以太坊源码分析-交易
  8. Android5.1.1源码 - 让某个APP以解释执行模式运行
  9. ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
  10. Yum database disk image is malformed 错误