二分图匹配——匈牙利算法和KM算法简介.ppt

二分图匹配——匈牙利算法和KM算法简介.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二分图匹配——匈牙利算法和KM算法简介.ppt

中山一中 黄源河 二分图匹配 匈牙利算法和KM算法简介 二分图的概念 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图。 最大匹配 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem) 如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。 匈牙利算法 求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。 增广路的定义(也称增广轨或交错轨): 若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。 匈牙利算法 由增广路的定义可以推出下述三个结论: 1-P的路径长度必定为奇数,第一条边和最后一条边都不属于M。 2-P经过取反操作可以得到一个更大的匹配M’。 3-M为G的最大匹配当且仅当不存在相对于M的增广路径。 匈牙利算法 用增广路求最大匹配(称作匈牙利算法,匈牙利数学家Edmonds于1965年提出) 算法轮廓: (1)置M为空 (2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M (3)重复(2)操作直到找不出增广路径为止 匈牙利算法 程序清单: Function find(k:integer):integer; var st,sf,i,j,t:integer; queue,father:array[1..100] of integer; begin queue[1] := k; st := 1; sf := 1; fillchar(father,sizeof(father),0); repeat 匈牙利算法 for i:=1 to n do if (father[i]=0)and(a[queue[st],i]=1) then begin if match2[i]<>0 then begin inc(sf); queue[sf] := match2[i]; father[i] := queue[st]; end else 匈牙利算法 begin j := queue[st]; while true do begin t := match1[j]; match1[j] := i; match2[i] := j; if t = 0 then break; i := t; j := father[t]; 匈牙利算法 end; find := 1; exit; end; end; inc(st); until st>sf; find := 0; end; 匈牙利算法 在主程序中调用下面的程序即可得出最大匹配数。 Bmatch := 0; For I:=1 to n do Bmatch := Bmatch + find(i); Writeln(Bmatch); 一个关于二分图的性质: 最大匹配数+最大独立集=X+Y 最佳匹配 如果边上带权的话,找出权和最大的匹配叫做求最佳匹配。 实际模型:某公司有职员x1,x2,…,xn,他们去做工作y1,y2,…,yn,每个职员做各项工作的效益未必一致,需要制定一个分工方案,使得人尽其才,让公司获得的总效益最大。 数学模型:G是加权完全二分图,求总权值最大的完备匹配。 KM算法 穷举的效率-n!,我们需要更加优秀的算法。 定理: 设M是一个带权完全二分图G的一个完备匹配,给每个顶点一个可行顶标(第i个x顶点的可行标用lx[i]表示,第j个y顶点的可行标用ly[j]表示),如果对所有的边(i,j) in G,都有lx[i]+ly[j]>=w[i,j]成立(w[i,j]表示边的权),且对所有的边(i,j) in M,都有lx[i]+ly[j]=w[i,j]成立,则M是图G的一个最佳匹配。证明很容易。 KM算法 对于任意的G和M,可行顶标都是存在的: l(x) = maxw(x,y) l(y) = 0 欲求完全二分图的最佳匹配,只要用匈牙利算法求其相等子图的完备匹

文档评论(0)

000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档