二分图及其相关知识总结

摘要:
(也就是说,每条边的至少一个端点是匹配点)路径:使m个点在两对之间没有边。找到m的最大值(如果图G满足二分图的条件)你可以使用二分图匹配来做。加权匹配:使二分图权重匹配最大值(或最小值)。最大匹配数=最小点覆盖数(这是Konig定理)定理2:最小路径覆盖数=顶点数-最大匹配数没有正确匹配:km算法[二分图的最小匹配]只需要反转权重值。
二分图及其相关知识总结

pre:

二分图:图G划分为两个点集A,B且在同一点集内的所有点互不相交的图.
匹配:在二分子图的边集M中如果M中的每条边的两个端点只有该条边与这两个端点相连,则M称为一个匹配
匹配边:两个相匹配的点之间的连线。
最大匹配:图中包含边数最多的匹配。
完备匹配:如果有一边的点全都是匹配点,则称这个匹配为完备匹配。
完美匹配:如果所有点都在匹配边上,称这个最大匹配是完美匹配。
最小覆盖: 用最少的(两边都行)让每条都至少和其中一个关联。(也就是说每个边至少有一个端点是匹配点)

路径:就是连着的几条边(1->2->3就是一条路径)
最小路径覆盖问题:在有向无环图中,用最少的路径条数(不相交的路径,即不仅不能有重合的边,连重合的点都没有)覆盖掉所有顶点。
最大独立集问题: 在N个点的图G中选出m个点,使这m个点两两之间没有边.求m最大值.(如果图G满足二分图条件)可以用二分图匹配来做.

带权匹配:使得该二分图的权值和最大(或最小)的匹配。
最大匹配:使得该二分图边数最多的匹配。
完备匹配:使得点数较小的点集中每个点都被匹配的匹配。
完美匹配:所有点都被匹配的匹配。
可知:完美匹配一定是最大匹配和完备匹配。

定理1:最大匹配数 = 最小点覆盖数(这是 Konig 定理)
定理2:最大匹配数 = |V| - |最大独立集|
定理3:最小路径覆盖数 = 顶点数 - 最大匹配数

无权匹配:匈牙利算法
带权匹配:km算法
【求二分图的最小匹配】
只需把权值取反,变为负的,再用KM算出最大权匹配,取反则为其最小权匹配.

1.二分图最大匹配

这东西一般用匈牙利算法解决.复杂度O(n)O(n3)
算法思想:在已有匹配的基础上通过寻找增广路来增加匹配.
实现方法:对于当前希望加入的点,找到一个与它相邻的点,判断它是否能被用上
  一个点能被用上有两种情况: 1.它没有被另个匹配相连
              2.与它匹配的点能换个点匹配(这里保证前面的解不变)
  那么显然对于第二点我们需要递归处理
具体实现如下

bool search(int x)
{
    int i;
    for(i=1;i<=m;i++)
        if(map[x][i] && !used[i]) {//有边相连并且这个点还没试过
            used[i]=1;//注意标记打在这(要不然下一步就没法递归了)
            if(b[i]==0 || search(b[i])){//没有匹配或者匹配能更换
                b[i]=x;
                return true;
            }
        }
    return false;
}
int main() {
    for(i=1;i<=n;i++) {
        memset(used,0,sizeof(used));//注意清空
        if(search(i)) ans++;
    }

定理:
定理1:最大匹配数 = 最小点覆盖数(König定理)
定理2:最大匹配数 = |V| - 最大独立数
定理3:最小路径覆盖数 = 顶点数 - 最大匹配数
(如果搞不灵清就画个样例跑一跑呗)

2.二分图最佳匹配

于二分图最大匹配不同的是:它的匹配中加入了权值,目标是使所选的权值和最大

针对这类问题我们使用KM算法予以解决:

论文:见收藏

免责声明:文章转载自《二分图及其相关知识总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CDH6.2安装3星|《投机教父尼德霍夫的股票投机术》:2003年的书了。作者97年投机大亏后在CNBC《金钱》栏目上的股市评论文章集。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OSPF 做负载均衡

使用OSPF做负载均衡探究 一、OSPF产生背景 随着互联网的快速发展,为了满足建造越来越大基于IP网络的需要,不得不把网络逻辑结构划分为一个个单一自治系统。 二、OSPF技术原理 OSPF(Open Shortest Path First开放式最短路径优先 )是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一...

ueditor使用遇到的问题

1、文件没法上传,需要引入ueditor官网说的那几个jar包才行 2、上传的文件读不出来,路径不对,需要把config.json里面的所有【“”】替换成【/你的项目路径】,即把所有的Prefix路径都改成你的项目路径 3、上传的视频打不开,这是一个ueditor(1.4.4.4版)的bug,config.json文件里的【whitList】改为【whit...

最短路径之(迪杰斯特拉)Dijkstra算法(及其改进:BF算法,SPFA算法),(弗洛伊德)Floyd算法

最短路径 最短路径问题是图的一个经典问题,常用的求最短路径的方法有 (迪杰斯特拉)Dijkstra算法,(弗洛伊德)Floyd算法。 Dijkstra算法用于求单源点最短路径问题,复杂度为O(n2),而Floyd算法用于求对每一对顶点之间的最短路问题(采用枚举法,枚举所有可能),复杂度为O(n3)。 一、Dijkstra算法: 迪杰斯特拉提出了一个按...

selenium 常见问题整理。

一:日期控件 selenium不能直接对日期控件操作,可以通过js对日期控件做赋值操作 WebElement inputTimeBox=driver.findElement(by.name("###"));                         //定位日期控件 Stringtime = "2015/10/10"; ((JavascriptExe...

二分图的定义及判断

二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B),则称图G为一个二分图。 二分图的另一种等价的说法是,可以把每个节点着以黑色和白色之一,使得每条边的两个端点颜色不同.不难发现...

Failed to mount component: template or render function not defined.

在公司下班前提交的代码,夜晚回家pull一把,运行却报错: Failed to mount component: template or render function not defined. 百度翻译:无法安装组件:模板或渲染功能未定义。 什么原因呢?百度了一大圈,有的说需要修改配置文件,有的说需要回退vue-loader版本。。。。。 但是都试了个遍...