ACM图论算法—UNIX插头问题

问题描述

你负责为联合国互联网执行组织(UNIX)的周年会议布置会议室。该组织的主旨是使互联网上的信息和思想的自由交流变得尽可能笨重和官僚(^_^)。
因为会议室被审计为招待来自世界各地的记者的场所,它装备了一些电气插座以匹配各个国家使用的电器的不同插头形状和电压。当然,这些插座的规格是以这个会议室建成时世界各国的规格作为标准的。不幸的是,由于这座会议室年代久远,它建成时,记者还只是使用很少量的电子和电气设备,所以它对每种类型只配备了一个插座。今天,记者像其他人一样,需要很多设备才能工作:掌上型计算器,手提电话,录音机,寻呼机,电咖啡壶,微波炉,电吹风,电熨斗,电动牙刷,等等。自然,这些设备当中有许多可以靠电池驱动的,但是看起来这个会议将会冗长乏味,所以还是希望这些设备尽可能从插座供电。

题目要求

输出最少的无法连接的设备数?
设备和会议插座看做是图的有向边,右图是最终所有设备和插座能连接的情况,要求是输出最少的无法连接的设备数,即求的是最大的匹配数!

问题的本质

该问题的本质是关于在二分图中,求最大匹配问题。
下面图是题目转换出来的关系,由于关系我们很容易联系到二分图。
这里写图片描述

二分图最大匹配算法介绍

二分图:
又称偶图,一个图的点集可以分解为两个非空子集X和Y,使 得每条边的一个端点在X中,另外一个端点在Y中。
这里写图片描述

二分图最大匹配思想:寻找最佳的分配方法使得资源分配效率最高

二分图最大匹配算法有两个,一个是匈牙利算法,另外一个是网络最大流算法。这里我就介绍匈牙利算法。但是由于原始图不符合二分图。因此不能直接在原始图上面用匈牙利算法。把原始图转换结果如下:
这里写图片描述

接下来就可以轻松的使用匈牙利算法,在说匈牙利算法之前,关于图的一些概念。借助下面的图进行辅助说明:
这里写图片描述
1、交替路
从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。eg:2-5-1-7-4-8
2、增广路
从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路(agumenting path)。
eg:2-5-1-7-4-8
3-5-1-7-4-8

3、定理:增广路中的匹配边总是比未匹配边多一条!

匈牙利算法的思想:寻找增广路
由增广路的性质,增广路中的匹配边总是比未匹配边多一条,所以如果我们放弃一条增广路中的匹配边,选取未匹配边作为匹配边,则匹配的数量就会增加。匈牙利算法就是在不断寻找增广路,如果找不到增广路,就说明达到了最大匹配。

下面是匈牙利算法实现的一个例子的图解过程:
1、起始没有匹配原图:
这里写图片描述

2、选中第一个点x1找第一条连线
这里写图片描述

3、选中第二个点x2找第二条连线
这里写图片描述

4、发现x3的第一条边x3y1已经被人占了,找出x3出发的的交错路径x3-y1-x1-y4,把交错路中已在匹配上的边x1y1从匹配中去掉,剩余的边x3y1 x1y4加到匹配中去。
这里写图片描述

思路:一旦遇到冲突赶紧找增广路
5、同理加入x5
这里写图片描述

算法执行结果

下面是使用匈牙利算法执行结果
这里写图片描述

总结

该算法最根本的问题就是要弄清楚二分图匹配问题。而后面需要对图不断的遍历需要一些子算法,这些子算法都离不开BFS,DFS。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值