匈牙利算法总结

匈牙利算法

匈牙利算法:讲的很细致。
匈牙利算法-看这篇绝对就够了!:很生动形象

1,用途:匈牙利算法主要用于解决一些与二分图匹配有关的问题(最大匹配和最小覆盖点数)。

二分图:是一类特殊的图,它可以被划分为两个部分,每个部分内的点互不相连。下图是典型的二分图。

2,最大匹配

在这里插入图片描述

2.1,基本概念:
  • 交错路径和增广路径
    • 红色表示当前的匹配点对(a1-b2匹配,a2-b3匹配)我们发现这个不是最完美的匹配,黑色表示可以匹配到一起的点,但是当前没有匹配。
    • 第二个路径匹配的更多(a1-b1, b2-a2, a3-b3)那么这个时候,匹配为最大。

在这里插入图片描述

  • 对应匹配

在这里插入图片描述

在这里插入图片描述

显然第二个图匹配结果最好。这是一个完美匹配,每一个顶点都找到了匹配。

2.2,非完美匹配
  • 匹配图

    每条线表示能够匹配的数
    在这里插入图片描述

  • 匹配步骤

    从b的方向看。

    • 1,b1 -> a1(形成一个匹配)

在这里插入图片描述

  • 2,b2 -> a1, a1 != b1, b1 -> a2(交错路径为:b2->a1->b1->a2),完成匹配(b1-a1, b1-a2)

在这里插入图片描述

  • 3,b3-a3

  • 4,b4->a2, a2 !=b1, b1->a1, a1!=b2 (交错路径为: b4->a2->b1->a1->b2), 完成匹配(a1-b1, a2-b4, a3-b3)

在这里插入图片描述

  • 5, b5->a4,完成匹配

在这里插入图片描述

完成匹配对为:(a1,b1), (a2, b4), (a3,b3), (a4, b5), b2和a5并没有得到匹配

3, 带权值的匈牙利算法
3.1, 问题描述

n个工人,指派n个工作,每个工人完成特定工作的时间不一样,进行分配,使总时间最少。

在这里插入图片描述

权值矩阵

在这里插入图片描述

3.2,算法步骤

1.每一行减去该行最小值

2.通过寻找增广路径的方式,尝试进行不带权重的匹配,只有值为0的项为可匹配项

3.如果最大匹配数为n,则结束,当前匹配为最优匹配,否则执行第4步

4.用最少的横线和竖线覆盖所有零值,取mv=未被覆盖的矩阵块的最小元素,所有未被覆盖的矩阵块的元素减去mv,所有被横竖线都覆盖的矩阵块的元素加上mv,然后回到第2步

在这里插入图片描述

标红的0为结果的临时匹配

3.3,结论

(1)划线(所有横线竖线)数量p<n

(2)矩阵块A的大小比D小,意味着A的元素数量比D小

在这里插入图片描述

(3)分析(算法复杂度为n*n)

在这里插入图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值