什么是匈牙利算法

date
May 1, 2022
Last edited time
May 1, 2022 03:32 PM
status
Published
slug
什么是匈牙利算法
tags
Algorithm
summary
type
Post
origin
Field
Plat
二分图
二分图:又称作二部图,是图论中的一种特殊模型。 设 是一个无向图,如果顶点 可分割为两个互不相交的子集 ,并且图中的每条边所关联的两个顶点 分别属于这两个不同的顶点集 ,则称图 G 为一个二分图。
简单来说,如果图中所有顶点可以被分为两个集合,图中所有的边的头和尾不属于同一个顶点集合而是跨越两个集合,则这个图是一个二分图。
例如:图 1.1 所示的图,无论如何划分顶点集合,也不能保证所有边的头和尾隶属于不同集合,因此,图 1.1 所示的图不是二分图。
图 1.1
图 1.1
例如:图 1.2 所示的无向图:
图1.2
图1.2
将顶点 作为集合 ,将 作为集合 ,将图 1.2 转化为图 1.3 所示:
图 1.3
图 1.3
可以看出,图中顶点可以划分为 两个集合,而任意一条边的头和尾又分别隶属于集合 和集合 ,因此,此图为二分图。

匹配

匹配:在图论中,一个匹配(matching)是指一个边的集合,其中任意两条边都没有公共顶点。 例如:图 2.1 中红色的边,可以为图 1.3 所示图的一个匹配。
图2.1
图2.1

最大匹配

最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。图 3.1 是一个最大匹配,它包含 4 条匹配边。
图 3.1
图 3.1

完美匹配

完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。完美匹配一定是最大匹配(完美匹配的任何一个点都已经匹配,添加一条新的匹配边一定会与已有的匹配边冲突),但并非每个图都存在完美匹配。

交替路径

交替路径:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边… 形成的路径称为交替路径。

增广路径

增广路径:从一个未匹配点出发,走交替路径,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路径(agumenting path)。
  • 增广路径性质:
      1. 的路径长度必定为奇数,第一条边和最后一条边都不属于 ,因为两个端点分属两个集合,且未匹配。
      1. 经过取反操作可以得到一个更大的匹配
      1. 的最大匹配当且仅当不存在相对于 的增广路径。

7 匈牙利算法

匈牙利算法:利用增广路径求二分图的最大匹配算法称作匈牙利算法。(匈牙利数学家 Edmonds 于 1965 年提出)。
基本思想:通过寻找增广路径,把增广路径中的匹配边和非匹配边的相互交换,这样就会多出一条匹配边,直到找不到增广路径为止。
例如:以图 2.1 所示的二分图为例,使用匈牙利算法求解图的最大匹配。 (1)从顶点 出发,按照交替路径前进,第一个非匹配边为,到达顶点 为非匹配点,构成增广路径。令 为匹配边,顶点 为匹配顶点。
notion image
(2)从顶点 出发,第一非匹配边为 ,到达顶点 ,选择匹配边到达 ,选择非匹配边, 为非匹配点,找到一条增广路径。
notion image
(3)交换增广路径中的匹配边与非匹配边,得到如下匹配。
notion image
(4)从顶点 出发,第一非匹配边为 ,到达顶点 ,然后按照交替路径前进,到达顶点 ,无法继续前进。
(5)从顶点 出发,选择第二条非匹配边。
notion image
(6)从顶点 出发,选择非匹配边,到达顶点 ,选择匹配边,到达顶点 a,选择非匹配边到达顶点 ,选择匹配边,到达顶部 ,没有可以选择的边,且没有找到增广路径。
(7)继续从顶点 出发,选择非匹配边,找到增广路径,将边变为匹配边,算法结束。
notion image

8 结语

匈牙利算法多用于指派问题中,例如任务匹配问题。通过转化为二分图的形式,求解最大匹配,保证实现最优分配。
 

© Lazurite 2021 - 2024