【数学与算法】二部图、匈牙利匹配、稳定婚配

二部图系列视频

关于匈牙利匹配可以联系下面两篇博客更容易理解和补盲:
带你入门多目标跟踪(三)匈牙利算法&KM算法
趣写算法系列之–匈牙利算法

14.1 二部图

广度优先搜索
广度优先,可以使用队列来操作:

  • 依次遍历节点,首先遍历第一个节点A,判断节点A是否遍历过,如果节点A没有遍历过,就把节点A添加进队列。
  • 然后取出队列中的第一个元素A,对于和节点A连接的某节点B和节点C等,把节点B和c进行标记(标记就是根据题目的具体要求进行操作,即你的目的是什么你就干什么),并且如果节点B和c没有遍历过,那么把节点B和C添加进队列。
  • 然后再取出队列中的第一个元素,就是节点B,遍历到了B节点,再对和B节点连接的节点D进行标记,并且判断D是否遍历过,没有遍历过的话就添加到队列。
  • 然后再取出队列第一个元素,为节点C。以此类推

14.2 无权二部图的最大匹配,最大流问题,其中有个网络最大流方法,贪心算法找最大匹配可能会失败。
贪心算法,每次局部最优,得到全局最优。
例如,每次只能从钱箱子里面取一张钞票,那肯定是每次都拿里面面值最大的一张,这样就会得到最优结果。
无权二部图的每条边权重都是一样的,为1。无权并不是说权重为0。

14.3有权二部图的最大匹配和最小匹配,把图边制作一个邻接矩阵。我们的目标是寻找权重之和最大的匹配。最大匹配限制条件:每一个节点都只能拥有一条边。注意,二部图并不是每个节点只有一条边。
以宠物收养为例,有权二部图的边的权重表示人对宠物的喜好程度,没有边表示喜好程度是0,也就是完全不喜欢。
宠物收养机构应该寻找有权二部图中的最大匹配。最大匹配,意味着让人领养最喜欢的宠物,获得最大的幸福感。

对于有权图,最大匹配和最小匹配是可以相互转化的。只需要把所有权重乘以 − 1 \color{blue}-1 1全都变为负数即可。即,本来求最大值,最大值乘以 − 1 \color{blue}-1 1 就变成了最小值了。

最大匹配是最优匹配,即所有匹配权重之和(函数值)最大。
最小匹配也是最优匹配,即所有匹配权重之和(函数值)最小。

  • 最大匹配可以理解为人对物体的喜好程度,每个人对分配给他的物体的喜好的和值最大的匹配对,就是最大匹配;
  • 最小匹配可以理解为两种物体的差异,所有物体差异的和值最小,就是最小匹配。

匈牙利算法用来寻找有权二部图中的最小匹配。但是匈牙利匹配中有一个限制,就是两个集合中的节点数都一样为n,即邻接矩阵必须是一个 n ∗ n \color{blue}n*n nn 的方阵。匈牙利算法的时间复杂度是 n 3 \color{blue}n^3 n3

问:匈牙利算法的输入必须要是方阵吗,也就是左右数目一样吗?

答:匈牙利算法不需要,KM算法必须得是完全匹配(可以补权值为零的边得到)。
但是在自动驾驶中,一般直接用匈牙利算法代指KM算法,里面调用的就是KM算法。
所以,自动驾驶中指代额匈牙利算法,是一个方阵n*n。如果有一条边权值为0,就表示二者没有边。
所以,如果匈牙利算法+KM算法最终得到的二者匹配的一对,如果边的权重为0,就表示不匹配。并不表示强行把二者给匹配起来。

匈牙利算法是解决最小匹配的问题,但是我们实际问题如果是要求最大匹配,应该怎么办呢?我们可以把最大匹配等价转换为最小匹配,即,把权重全部取反,这样就把喜爱程度变成厌恶程度了,然后再调用匈牙利算法即可。
最小匹配的理解就是幸福度最低,我们最开始是 + 10 \color{blue}+10 +10,表示特别喜欢某只宠物,取负数就变成了特别不喜欢这只宠物,如果每个人都分配到了最最不喜欢的宠物,那么就是最小匹配。所以最小匹配并不是说被领养的宠物最少,而是最差匹配。最大匹配应该理解为最优匹配,最小匹配应该理解为最差匹配。

不过,不要狭隘的理解最大匹配和最小匹配的匹配结果是一样的。因为最大匹配是权值之和最大的匹配,而最小匹配是权值之和最小的匹配。两个集合中,最大匹配和最小匹配肯定不会是同一种匹配结果。前面介绍的最大匹配和最小匹配的互相转化,最终的匹配结果是同一种,只不过因为最小化更容易求解,例如匈牙利匹配就是根据寻找权重之和的最小值来求解问题的。

【14-4: 匈牙利算法 Hungarian Algorithm-哔哩哔哩】

匈牙利算法只需要操作邻接矩阵

最大匹配并不唯一,可能有多种匹配方式都能达到同样幸福度。

14.6 稳定婚配问题
Gale-shapley解决稳定婚配问题。就是 n \color{blue}n n个男人分别对 n \color{blue}n n个女人进行爱慕程度排序, n \color{blue}n n个女人也分别对 n \color{blue}n n个男人进行爱慕程度排序。
每个男性都首先选择最喜欢的女性,如果女性的爱慕程度的最优选择不是你,你就划掉该女性,下次匹配不会再考虑她,然后你再选择你第二爱慕的女性,直到配对成功。并且每次匹配之后,依旧单身的男性先选择女性,无论女性是否已配对,可以挖墙脚,把已配对的男性变成单身。直到最后所有男人配对成功(此时所有女人也会配对成功)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值