二分匹配.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二分匹配.ppt

ACM/ICPC暑期集训讲座 二分图匹配 cnhawk 2007.7.25 经典问题——工作分配 一个公司有n个工作岗位空缺,每个岗位空缺需要有一定资格的人来填补。现在有m个人申请这n个工作。由于每个人工作能力不同,所以不同的人能胜任不同的工作。 现在已知每个人所能胜任的若干工作,求这m个人最多可以填补几个工作岗位。 每个人只能做一份工作,每个工作岗位也只需要一个人 二分图的一般表述 一个图的点,可以分割成两个集合X和Y 在集合内部没有边 任何一条边的两个端点都分属不同的集合 匹配 在工作分配的问题中,我们给出一个可行的分配方案,就是一个匹配。如果这个匹配是最优的(可以填补的工作岗位最多),就是最大匹配。 匹配 匹配的一般定义:匹配是二分图所有边的一个子集,在这个子集中任意两条边都没有公共点。 最大匹配:边数最多的一个匹配 *覆盖的概念:与匹配相关的顶点集 二分图最大匹配问题 现在,工作分配问题变成了求一个二分图中最大匹配的问题。 二分匹配的经典算法: 匈牙利算法(Ford-Fulkerson算法的变形) 基本概念 左边/右边 交错链(增广路) 对于一个已有的匹配而言 从未被覆盖的点出发,寻找一个交错链。 交错链长度为奇数,它上面的边依次为:未选,已选,未选,已选…未选 交错链 交错链 几个重要的性质: 1.对于一个已有的匹配(可以为空匹配)可以通过更改交错链上的边来获取更大的匹配 2.如果我们找到了一个匹配,并且再也找不到交错链了,那么这个匹配是最大匹配 匈牙利算法 匈牙利算法的思路就是:不停地在一个二分图中寻找交错链,直到找不到为止。 寻找交错链可以用BFS或DFS,其中BFS效率很高,但实现较复杂。 寻找交错链的算法 1,从左某一个未被匹配的点开始寻找,把所有与它相连的点加进队列 2,如果在右边找到一个未被匹配的点,则算法结束 3,如果在右边找到一个已经被匹配了的点,则看看它是与左边的那个点相匹配的,从相匹配的那个点出发在右边找其它的点,把它们加入队列 寻找交错链 对每一个左边的没有被匹配的点进行BFS,如果在右边直接找到一个点没有被匹配,那么我们就可以增加一条匹配的边 寻找交错链 对每一个左边的没有被匹配的点进行BFS,如果在右边直接找到一个点没有被匹配,那么我们就可以增加一条匹配的边 寻找交错链 对每一个左边的没有被匹配的点进行BFS,如果在右边直接找到一个点没有被匹配,那么我们就可以增加一条匹配的边 寻找交错链 寻找交错链:如果在右边找到一个已经被匹配了的点,则看看它是与左边的哪个点相匹配的,从相匹配的那个点出发在右边找其它的点,把它们加入队列 寻找交错链 寻找交错链的算法 1,从左某一个未被匹配的点开始寻找,把所有与它相连的点加进队列 2,如果在右边找到一个未被匹配的点,则算法结束 3,如果在右边找到一个已经被匹配了的点,则看看它是与左边的哪个点相匹配的,从相匹配的那个点出发在右边找点,把它们加入队列 代码(模板) Bipartite.cpp 二分图匹配(邻接矩阵表示) 邻接表的图需要修改一下 复杂度分析 对于一个有V个点,E条边的二分图 每一次BFS的复杂度为O(E) 可以证明,对于每一个左边的点最多进行一次BFS就可以找到一个最大匹配 所以总的复杂度是O(VE) 经典问题——棋盘覆盖 在一个m行n列的棋盘上,有些点被禁止,问能否用1x2的多米诺骨牌覆盖其他位置? 如果不能全部覆盖,则最多可以覆盖多少个小格? 经典问题——棋盘覆盖 FZU-1467 与这个问题几乎一样/problem.php?pid=1467 解决思路: 先给棋盘染色! 经典问题——棋盘覆盖 将棋盘染成黑白二色,则:任意一个多米诺骨牌必定会覆盖一个白色的格子和一个黑色的格子! 问题变成了黑点与白点之间的二分匹配,相邻的点之间有一条边。 作业 TOJ-1050 FZU-1467(数据范围较大,必须用邻接表实现) 二分图匹配是一个比较难的内容,如果不能深入了解算法,可以先搞清楚它可以解决哪些问题,遇到此类问题只要套上模板就可以AC * * 1 2 1 2 4 3 3 4 1 2 1 2 4 3 3 4 1 2 1 2 4 3 3 4 1 2 1 2 4 3 3 4 1 2 1 2 1 2 4 3 3 4 1 3 1 2 1 2 4 3 3 4 2 4 1 2 1 2 4 3 3 4 2 4 1 2 1 2 4 3 3 4 *

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档