主要定理二分图的最大匹配算法二分图的带权重的最大匹配

合集下载

Ku二分图最大权匹配(KM算法)hn

Ku二分图最大权匹配(KM算法)hn

Maigo的KM算法讲解(的确精彩)顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。

在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。

KM 算法的正确性基于以下定理:* 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。

这个定理是显然的。

因为对于二分图的任意一个匹配,如果它包含于相等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含于相等子图,那么它的边权和小于所有顶点的顶标和。

所以相等子图的完备匹配一定是二分图的最大权匹配。

初始时为了使A[i]+B[j]>=w[i,j]恒成立,令A[i]为所有与顶点Xi关联的边的最大权,B[j]=0。

如果当前的相等子图没有完备匹配,就按下面的方法修改顶标以使扩大相等子图,直到相等子图具有完备匹配为止。

我们求当前相等子图的完备匹配失败了,是因为对于某个X顶点,我们找不到一条从它出发的交错路。

这时我们获得了一棵交错树,它的叶子结点全部是X顶点。

现在我们把交错树中X顶点的顶标全都减小某个值d,Y顶点的顶标全都增加同一个值d,那么我们会发现:两端都在交错树中的边(i,j),A[i]+B[j]的值没有变化。

也就是说,它原来属于相等子图,现在仍属于相等子图。

两端都不在交错树中的边(i,j),A[i]和B[j]都没有变化。

也就是说,它原来属于(或不属于)相等子图,现在仍属于(或不属于)相等子图。

X端不在交错树中,Y端在交错树中的边(i,j),它的A[i]+B[j]的值有所增大。

它原来不属于相等子图,现在仍不属于相等子图。

X端在交错树中,Y端不在交错树中的边(i,j),它的A[i]+B[j]的值有所减小。

也就说,它原来不属于相等子图,现在可能进入了相等子图,因而使相等子图得到了扩大。

现在的问题就是求d值了。

图匹配总结二分图匹配

图匹配总结二分图匹配

序言:回忆起最初学习图匹配算法的艰辛与困惑,苦中有乐,但很多时间都浪费在了资料的寻找与甄别上。

因此,在对自己做一次知识总结的同时,整理与记录下了这些文字,希望能够给大家带来一定的帮助。

目录:第一部分:二分图的最大匹配第二部分:五种方式,两类构图第三部分:二分图匹配算法总结第四部分:二分图的最优权值匹配第五部分:一般图的最大匹配第六部分:图匹配题目列表符号说明:N,V:点数E:边数u,v,i,j:节点的标号INF:正无穷大-INF:负无穷大名词说明:时间复杂度:算法的理论时间上界时间效率:实际中算法运行的平均时间效率引用说明:文中参考了一些来源于网络的资料,也有原文全段引用的部分。

在这些资料被n+1次转载后,我已无法获知所有原作者的信息。

在此,对所有前辈们表示真诚的歉意和诚挚的敬意。

特别感谢Amber大神犀利的代码。

作者:Snow_storm正文:第一部分:二分图匹配有这么两个奇怪的工厂:工厂X只生产杯具,工厂Y只生产洗具。

最近,两个工厂决定将产品实行打包策略:即一个杯具搭配上一个洗具。

但由于杯具和洗具的形状和功能各不相同,对于某个类别的杯具来说,只能搭配某些类型的洗具。

现在,两个工厂的厂长大人想知道最多能成功的搭配多少对杯具与洗具。

类似于上面例子中提到的搭配问题,在图论中的有规范的名称:匹配。

注意到,上面的例子中涉及到的物品只有两类(杯具与洗具),且问题只涉及杯具与洗具的匹配,我们把这种只涉及一种关系的匹配问题称为二分匹配问题。

现在,让我们理清一些概念。

二分图:若图G中的点可以分为X和Y两部分,且每部分内部无任何边相连,则称图G为二分图。

匹配:无公共点的边集合(可以想象一下结婚这个词汇)。

匹配数:边集中边的个数最大匹配:匹配数最大的匹配。

如图1-1,展示的就是一个二分图:粗体线表示该二分图的一种匹配方式,不难发现,此时的匹配已经是最大匹配。

图 1-1如何能得到一个二分图的最大匹配?运用简单的枚举:找出全部匹配,然后保留匹配数最多的。

二分图的最大匹配、完美匹配和匈牙利算法

二分图的最大匹配、完美匹配和匈牙利算法

二分图的最大匹配、完美匹配和匈牙利算法August 1, 2013 / 算法这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。

二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。

准确地说:把一个图的顶点划分为两个不相交集U和V,使得每一条边都分别连接U、V中的顶点。

如果存在这样的划分,则此图为一个二分图。

二分图的一个等价定义是:不含有「含奇数条边的环」的图。

图 1 是一个二分图。

为了清晰,我们以后都把它画成图 2 的形式。

匹配:在图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。

例如,图3、图 4 中红色的边就是图 2 的匹配。

我们定义匹配点、匹配边、未匹配点、非匹配边,它们的含义非常显然。

例如图 3 中 1、4、5、7 为匹配点,其他顶点为未匹配点;1-5、4-7为匹配边,其他边为非匹配边。

最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。

图 4 是一个最大匹配,它包含 4 条匹配边。

完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。

图 4 是一个完美匹配。

显然,完美匹配一定是最大匹配(完美匹配的任何一个点都已经匹配,添加一条新的匹配边一定会与已有的匹配边冲突)。

但并非每个图都存在完美匹配。

举例来说:如下图所示,如果在某一对男孩和女孩之间存在相连的边,就意味着他们彼此喜欢。

是否可能让所有男孩和女孩两两配对,使得每对儿都互相喜欢呢?图论中,这就是完美匹配问题。

如果换一个说法:最多有多少互相喜欢的男孩/女孩可以配对儿?这就是最大匹配问题。

基本概念讲完了。

二分图匹配匹配

二分图匹配匹配

应用2
• 覆盖集与独立集互为补集 • 二分图中可求出最大匹配M • 最小覆盖集=M,最大独立集=n-M
应用3
• 一共N个男孩和女孩参加聚会,某些男孩和女孩 之间会产生恋爱关系。现在希望找到最多的孩子, 他们之间不会产生恋爱关系。
应用3
• 男孩在一边,女孩在一边 • 会产生恋爱关系的连边 • 找最大独立集
应用2
• 覆盖集的补集一定是独立集 • 证明: 假设某一覆盖集的补集不是独立集。说 明有一条边连接了覆盖集的补集的两个点。 那么这条边没有被覆盖集所覆盖,产生矛 盾。
应用2
• 独立集的补集一定是覆盖集 • 证明: 假设某一独立集的补集不是覆盖集。说 明有一条边不被独立集的补集覆盖,那么 这条边连接了独立集的两个端点,产生矛 盾。
KM算法
• X端不在交错树中,Y端在交 错树中的边(i,j),它的A[i]+B[j] 的值有所增大。它原来不属 于相等子图,现在仍不属于 相等子图。
KM算法
• X端在交错树中,Y端不在交 错树中的边(i,j),它的A[i]+B[j] 的值有所减小。也就说,它 原来不属于相等子图,现在 可能进入了相等子图,因而 使相等子图得到了扩大。
图论2
江川
二分图
• 一个图的点集可以划分为两个不相交的子 集,每一个子集中的点和该子集中的其他 点没有边相连
二分图
• 一个图是二分图的充要条件是这个图里没 有奇环
二分图匹配
• 匹配:给定一个二分图G,M为G边集的一 个子集,如果M满足当中的任意两条边都不 依附于同一个顶点,则称M是一个匹配。 • 最大匹配:所有匹配中边数最多的。 • 完备匹配:如果一个匹配中,图中的每个 顶点都和图中某条边相关联,则称此匹配 为完备匹配。

最大权重匹配算法

最大权重匹配算法

最大权重匹配算法
最大权重匹配算法也叫做二分图匹配,它是解决二分图中最大匹配问题的一种常见算法。

二分图,顾名思义,就是可以分成两部分的图,即将所有节点分成两部分,使得同一
部分内的节点不连通。

下文中,我们以左侧节点为一部分,右侧节点为一部分。

最大权重匹配算法的目的是,在二分图中找到一种最大匹配方式,并且每条匹配边的
权重之和最大。

在实际问题中,这种算法经常用于任务分配、物流运输、职工配对等方
面。

算法过程:
1. 初始化所有匹配边的权重为0,同时记录每个节点是否被匹配过。

2. 从左侧部分的未匹配节点开始,遍历所有未匹配节点,将其标记为当前选中节
点。

3. 查找与当前选中节点有连通边的所有右侧节点,对于每个右侧节点,都计算出它
和当前选中节点形成的匹配边的权重。

如果该权重比之前已存在的匹配边权重要大,则更
新该匹配边权重,并将当前选中节点和右侧节点确定为一条新的匹配边。

如果需要更新匹
配边,则需要将之前的匹配边删除,统计删除边后,继续查找新的匹配边。

4. 如果当前选中节点不能形成新的匹配边,则回溯到上一个节点,并标记该节点为
已匹配。

5. 重复第2、3、4步操作,直到找出全部最大匹配边。

该算法的时间复杂度为O(n^3),属于多项式时间内可解决问题的范围,而且是一种较为高效的匹配算法。

但是需要注意的是,该算法必须满足是一个二分图才可以使用。

同时,算法并不能保证是一个最小顶标和、最优匹配的算法,但在大多数情况下,都可以得到较
好的匹配效果。

二分图匹配问题最大匹配以及相关结论多重匹配最大带权匹配带花树算法

二分图匹配问题最大匹配以及相关结论多重匹配最大带权匹配带花树算法

⼆分图匹配问题最⼤匹配以及相关结论多重匹配最⼤带权匹配带花树算法⼆分图匹配问题:做法:①匈⽛利算法,时间复杂度O(N*V)②Hopcroft-Karp,时间复杂度O(√N*V)相关结论:①最⼩顶点覆盖(könig定理) ⼆分图的最⼩顶点覆盖=最⼤匹配数②最⼩路径覆盖(不要求⼆分图):在图中找⼀些路径,使之覆盖了图中的所有顶点,且任何⼀个顶点有且只有⼀条路径与之关 最⼩路径覆盖 = 顶点数 - 最⼤匹配配对于有向⽆环图,⾸先拆点,建成⼆分图再进⾏求解·最⼩不相交路径覆盖 建图⽅式:把⼀个的点V拆点成Vx和Vy,如果A连向B,那么就建⼀条Ax连向By的边。

 图中有多少条路径,可以以⼀种⽅法得到,就是计算出度为0的点的个数。

如果知道这个就很容易得出这个结论了 ·最⼩相交路径覆盖 做法⾸先跑floyd,求出原图的传递闭包,然后⽤上述⽅法做即可③最⼩边覆盖最⼩边覆盖=图顶点-最⼤匹配⾸先⼀开始,假如⼀条边都不选的话,要覆盖所有的点就必须每个点都选⼀次,也就是n次,然后每选⼀条边就会减少1个,所以结论显⽽易见④最⼤独⽴集最⼤独⽴集=图顶点-最⼤匹配=最⼩边覆盖⼆分图的独⽴数等于顶点数减去最⼤匹配数,很显然的把最⼤匹配两端的点都从顶点集中去掉这个时候剩余的点是独⽴集,这是|V|-2*|M|,同时必然可以从每条匹配边的两端取⼀个点加⼊独⽴集并且保持其独⽴集性质。

⼆分图多重匹配( ⼀ ) 如果x部节点只对应⼀个y部节点,⽽y部节点可以对应多个x部节点,那么这种匹配可以⽤匈⽛利算法来解决解决的问题:⼀个y最多匹配cnt个x是否成⽴,要问⼀个y匹配⼈数最⼤的最⼩值可以⽤⼆分答案来做解决思路:根据匈⽛利算法的思想,这时的link[u]要变成link[u][i],表⽰与y[u]匹配好了的第i个点,⽤vlink[u]记录已经于u点匹配了的点的个数,对于x中的x[k],找到⼀个与他相连的y[i]后,同样判断匈⽛利算法中的两个条件是否成⽴,若满⾜第⼀个条件,直接将x[k],y[i]匹配,否则,如果与y[i]所匹配的点已经达到了饱和,那么在所有与y[i]配合的点中选⼀个点,检查能否找到增⼴路,如果能,就让出位置让x[k]与y[i]匹配( ⼆ )如果x部节点可以匹配多个y部节点,y部节点可以同时匹配多个x部节点,那么应该⽤⽹络流来解决。

二分图匹最大配与最佳匹配

二分图匹最大配与最佳匹配

二分图:二分图是这样的一个图,它的顶点可以分为两个集合X和Y。

所有的边关联的两个顶点中,恰好一个属于集合X,一个属于集合Y。

二分图的匹配:给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。

二分图的最大匹配:二分图的所有匹配中包含边数最多的匹配称为图的最大匹配。

完美(完备)匹配:如果所有点都在匹配边上,称这个最大匹配是完美匹配。

最佳匹配:如果边上带权的话,找出权和最大的匹配叫做求最佳匹配。

增广路径:也称增广轨或交错轨。

若P是图G中一条连通两个未匹配顶点的路径,并且属最大匹配边集M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广轨。

定义总是抽象的下面通过图来理解它。

图中的线段(2->3, 3->1, 1->4)便是上面所说的p路径,我们假定边(1,3)是以匹配的边,(2,3)(1,4)是未匹配的边,则边(4,1)边(1,3)和边(3,2)在路径p上交替的出现啦,那么p就是相对于M的一条增广轨,这样我们就可以用边1,4 和边2,3 来替换边1,3 那么以匹配的边集数量就可以加1,。

下面给出关于二分图最大匹配的三个定理1:最大匹配数+ 最大独立集= n + m2:二分图的最小覆盖数= 最大匹配数3:最小路径覆盖= 最大独立集最大独立集是指求一个二分图中最大的一个点集,该点集内的点互不相连。

最小顶点覆盖是指在二分图中,用最少的点,让所有的边至少和一个点有关联。

最小路径覆盖是指一个不含圈的有向图G 中,G的一个路径覆盖是一个其结点不相交的路径集合P,图中的每一个结点仅包含于P 中的某一条路径。

路径可以从任意结点开始和结束,且长度也为任意值,包括0.1求解二分图最大匹配的方法:●匈牙利算法(时间复杂度O(nm))其思想是是通过不断的寻找增广轨实现最大匹配。

●转化为单位容量简单网络的最大流问题(本文不介绍)在二分图的基础上,加入源点s和汇点t,让s与每个X结点连一条边,每个Y结点和t连一条边,所有弧的容量为1。

Ku二分图最大权匹配(KM算法)hn

Ku二分图最大权匹配(KM算法)hn

Kuhn-Munkres 算法Maigo 的 KM 算法讲解(的确精彩)KM 算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转 化为求完备匹配的问题的。

设顶点 Xi 的顶标为 A[i],顶点 Yi 的顶标为 B[i],顶点 Xi 与 Yj 之间的边权为 w[i,j]。

在算法执行过程中 的任一时刻,对于任一条边(i,j), A[i]+B[j]>=w[i,j]始终成立。

KM 算法的正确 性基于以下定理: * 若由二分图中所有满足 A[i]+B[j]=w[i,j]的边(i,j)构成的子图 (称做相等子 图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。

这个定理是显然的。

因为对于二分图的任意一个匹配,如果它包含于相 等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含于相 等子图,那么它的边权和小于所有顶点的顶标和。

所以相等子图的完备匹配 一定是二分图的最大权匹配。

初始时为了使 A[i]+B[j]>=w[i,j]恒成立,令 A[i]为所有与顶点 Xi 关联的边 的最大权,B[j]=0。

如果当前的相等子图没有完备匹配,就按下面的方法修改 顶标以使扩大相等子图,直到相等子图具有完备匹配为止。

我们求当前相等子图的完备匹配失败了,是因为对于某个 X 顶点,我们 找不到一条从它出发的交错路。

这时我们获得了一棵交错树,它的叶子结点 全部是 X 顶点。

现在我们把交错树中 X 顶点的顶标全都减小某个值 d,Y 顶 点的顶标全都增加同一个值 d,那么我们会发现:两端都在交错树中的边(i,j),A[i]+B[j]的值没有变化。

也就是说,它原来属于 相等子图,现在仍属于相等子图。

两端都不在交错树中的边(i,j),A[i]和 B[j]都没有变化。

也就是说,它原来属于 (或不属于)相等子图,现在仍属于(或不属于)相等子图。

X 端不在交错树中,Y 端在交错树中的边(i,j),它的 A[i]+B[j]的值有所增大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/8/11 山东大学 软件学院 11
通过增广路求二分图上的最大匹配
从图 G = (S, T, E)的任意一个匹配 M 开始,比如空集。 由 S 的一个未被匹配的顶点出发, 用一个系统方法搜索一条 M-增广路 P。 若 P 存在,则通过交换 P 在 M 和不在 M 中的边,便得到一 个其基数增加 1 的匹配。 然后从新的匹配开始,继续迭代,直到不存在 M-增广路, 则当前的匹配就是 G 的最大匹配。
2018/8/11
山东大学 软件学院
3
使用最大流算法求二分图上的最大匹配
给定二分图G = (V, U, E),构造流网络。 增加一个源点 s,从 s 到 V 中每个顶点引一条有向边。 增加一个目标顶点 t,从 U 中每个顶点向 t 引一条有向边。 E中的边均从 V 指向 U。 记得到的流网络为G’ = (V’, E’)。G’中的每条边均为单位容 量。 计算G’上从 s 到 t 的最大流。 E 中的饱和边即构成 G 上的一个最大匹配。
2018/8/11
山东大学 软件学院
4
例子
18/8/11
山东大学 软件学院
5
定理
定理:记G’上的最大流为f*,流值为|f*|。G上的最大匹配 为M*。则|f*| = |M*|。 证明:首先证|f*| |M*|。 给定最大匹配M*,令G’上M*中的边的流值为1,s到M*匹 配的V一侧点的各条边上流值为1,M*匹配的U一侧点到t的 各条边上流值为1,则构造了一个流值为|M*|的流f。 因此,显然有|f*| |M*|。 再证|f*| |M*|。 设f*为G’上的最大流。 由整流定理,G’上每条边上的流值为整数。由于每条边的 容量均为1,因此G’上每条边的流值不是0就是1。
2018/8/11
山东大学 软件学院
12
二分图上最大匹配的标号算法
输入:二分图 G = (S, T, E)。 输出:G 的最大匹配 M。 1 2 3 4 5 6 7
2018/8/11
M 。 对 S 中所有不在 M 中的顶点标号“” ,然后将这些顶点 都加入 Q。/* Q 是已标号但未检查的顶点的集合 */ while Q do 从 Q 中取出一个顶点 k,然后将 k 从 Q 中删除。 if k S then 对每条同 k 关联的边(k, j) M, 若 j 尚未被标号, 则给点 j 标号 k,并将 j 加入 Q。 else /* k T */
第6章 图与网络分析
6.7 最大匹配问题
2018/8/11
最大对集(匹配)问题
二分图的对集,基本概念,主要定理 二分图的最大匹配算法 二分图的带权重的最大匹配——分派问题及算法
2018/8/11
山东大学 软件学院
2
基本概念
图 G = (V, E)的对集 M:M 是 E 的子集,且 M 中任意两条边 均不相邻(都不共享顶点) 。 M-饱和点 i:V(M)中的顶点(i V(M),匹配的点) 。 M-非饱和点 i: V(M)之外的顶点 (i V(M), 没有匹配的点) 。 极大对集 M:不存在另外一个对集 M ,使得 M M 。 最大对集 M:不存在另外一个对集 M ,使得 M M 。 完美对集 M:对集 M,匹配了 G 上所有的点。
2018/8/11
山东大学 软件学院
8
顶点覆盖
2018/8/11
山东大学 软件学院
9
定理6.8.1
定理 6.8.1(Berge, 1957)图 G 中的一个匹配 M 是最大匹配当且 仅当 G 不包含 M-增广路。 (说明:G 是一般图,不要求是二分图。 ) 证:()。G 上若有 M-增广路,则可以使用这条路更新 M 得 到基数更大(多 1)的一个匹配,与 M 是最大匹配矛盾。 ()。假设 M 是一个匹配,图 G 上不含有 M-增广路,而 M 不 是最大匹配。 于是,存在 G 上另外一个匹配 M’,有|M’| > |M|。
山东大学 软件学院 13
二分图上最大匹配的标号算法
8 9 10 11 if k 在 M 中 then /* 此时有 k T V(M) */ 设(i, k)是关联于 i、 属于 M 的边 (此时 i S) 。 给点 i 标号 k,并将 i 加入 Q。 else /* 此时有 k T \ V(M) */ 终止在 k 的一条增广路被找到。从 k 开始, 反向追踪标号找到这条增广路 P,路的起 始顶点有标号“” 。 12 13 用增广路 P 更新 M。 删除 G 上所有的标号。重新对 S 中所有不 在 M 中的顶点标号“” ,然后将这些顶 点都加入 Q。 14
2018/8/11 山东大学 软件学院 6
证明
再由流守恒约束,V中每个顶点最多有一条出去的边流值为 1。同理,U中每个顶点最多有一条进来的边流值为1。 记M = {e E | e上的流值 > 0},因此M中的任何两条边均不 共享顶点,即,M是一个匹配,且|f*| = |M|。 因此,显然有|f*| |M|。
2018/8/11
山东大学 软件学院
7
基本概念
M -交错路:边在对集 M 和 E \ M 中交错出现的路。 M -增广路:起点和终点都不在 V(M)中的 M -交错路。 顶点覆盖 K:K 是 V(G)的子集,且 G 的每条边都至少有一 个端点在 K 中。 最小顶点覆盖 K:不存在另外一个覆盖 K’,使得 K K 。
2018/8/11
山东大学 软件学院
10
证明
令 H 是 G 上 M’M 的导出子图。 由于 H 中的每个顶点最多只能和 M 中的一条边以及 M’中的 一条边关联,因此 H 中每个顶点的度都不超过 2(都是 1 或 者 2) 。 因此,H 的每个连通分支或者是边在 M 和 M’中交错出现的 路,或者是边在 M 和 M’中交错出现的偶圈。 由于在 G 中有|M’| > |M|,而 H 是 M’和 M 的对称差,M’在 H 中的边数必然也 > M 在 H 中的边数。 这表明 H 中至少有一个连通分支,是一条起始于 M’中的边 又终止于 M’中的边的路。 由定义,这条路是一条 M-增广路,与给定条件矛盾。
相关文档
最新文档