信息学竞赛算法分析与设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《信息学竞赛算法分析与设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 竞赛 算法 分析 设计 课件
- 资源描述:
-
1、1信息学竞赛信息学竞赛算法分析与设计算法分析与设计2本节课程内容本节课程内容(bipartite graph、matching)l 匈匈 牙牙 利利 算算 法法 lKuhn-Munkras算法算法3二分图的概念二分图的概念l二分图又称作二部图,是图论中的一种特殊模二分图又称作二部图,是图论中的一种特殊模型。型。l设设G=(V,R)是一个无向图。如顶点集是一个无向图。如顶点集V可分割可分割为两个互不相交的子集,并且图中每条边依附为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图的两个顶点都分属两个不同的子集。则称图G为二分图。为二分图。1122334454最大匹配最大
2、匹配l给定一个二分图给定一个二分图G,在,在G的一个子图的一个子图M中,中,M的边集的边集E中的任意两条边都不依附于同一个中的任意两条边都不依附于同一个顶点,则称顶点,则称M是一个匹配。是一个匹配。l选择这样的边数最大的子集称为图的最大匹配选择这样的边数最大的子集称为图的最大匹配问题问题(maximal matching problem)l如果一个匹配子图中,图中的每个顶点都和匹如果一个匹配子图中,图中的每个顶点都和匹配子图中某条边相关联,则称此匹配为完全匹配子图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。配,也称作完备匹配。5匈牙利算法匈牙利算法l求最大匹配的一种显而易见的算法是:
3、先找出全求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法部匹配,然后保留匹配数最多的。但是这个算法的复杂度为边数的指数级函数。因此,需要寻求的复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。一种更加高效的算法。l增广路的定义增广路的定义(也称增广轨或交错轨也称增广轨或交错轨):若若P是图是图G中一条连通两个未匹配顶点的路径,中一条连通两个未匹配顶点的路径,并且属并且属M的边和不属的边和不属M的边的边(即已匹配和待匹配的即已匹配和待匹配的边边)在在P上交替出现,则称上交替出现,则称P为相对于为相对于M的一条增广的一条增广路径。路径。6匈牙利算法匈牙
4、利算法l由增广路的定义可以推出下述三个结论:由增广路的定义可以推出下述三个结论:1.P的路径长度必定为奇数,第一条边和最后一条边的路径长度必定为奇数,第一条边和最后一条边都不属于都不属于M。2.P经过取反操作可以得到一个更大的匹配经过取反操作可以得到一个更大的匹配M。3.M为为G的最大匹配当且仅当不存在相对于的最大匹配当且仅当不存在相对于M的增广的增广路径。路径。7匈牙利算法匈牙利算法l用增广路求最大匹配用增广路求最大匹配(称作匈牙利算法,称作匈牙利算法,匈牙利数学家匈牙利数学家Edmonds于于1965年提出年提出)l算法轮廓:算法轮廓:l(1)置置M为空为空l(2)找出一条增广路径找出一条
5、增广路径P,通过取反操作获得,通过取反操作获得更大的匹配更大的匹配M代替代替Ml(3)重复重复(2)操作直到找不出增广路径为止操作直到找不出增广路径为止8任给初始匹配找xV1为非饱和点S=x,T=取yN(s)-T存在一条从x到y的M可增广路P,M:=MP无法继续匹配,停止存在边y,u MS:=SuT:=T yM饱和V1N(s)=T?YNYNY已经饱和YN停止,M为最大匹配9设G是具有二部划分(V1,V2)的二分图.(1)任给初始匹配M;(2)若M饱和V1则结束.否则转(3);(3)在V1中找一非M饱和点x,置S=x,T=;(4)若N(S)=T,则停止,否则任选一点yN(S)-T;(5)若y为M
6、饱和点转(6),否则作求一条从x到y的M可增广路P,置M=MP,转(2)(6)由于y是M饱和点,故M中有一边y,u,置S=Su,T=Ty,转(4).匈牙利算法步骤匈牙利算法步骤10匈牙利算法匈牙利算法程序清单:#include#includebool g201201;int n,m,ans;bool b201;int link201;11匈牙利算法匈牙利算法bool init()int _x,_y;memset(g,0,sizeof(g);memset(link,0,sizeof(link);ans=0;if(scanf(“%d%d”,&n,&m)=EOF)return false;for(i
7、nt i=1;i=n;i+)scanf(“%d”,&_x);for(int j=0;j_x;j+)scanf(“%d”,&_y);g i _y=true;return true;12匈牙利算法匈牙利算法bool find(int a)for(int i=1;i=m;i+)if(ga i=1&!b i)b i=true;if(link i=0|find(link i)link i=a;return true;return false;13匈牙利算法匈牙利算法int main()while(init()for(int i=1;i=wi,j 成立成立(wi,j表示边的权表示边的权),且,且对所有的边
8、对所有的边(i,j)in M,都有都有lxi+lyj=wi,j成立,成立,则则M是图是图G的一个最佳匹配。的一个最佳匹配。25KM算法算法l对于任意的对于任意的G和和M,可行顶标都是存在的:,可行顶标都是存在的:ll(x)=maxw(x,y)ll(y)=0l欲求完全二分图的最佳匹配,只要用匈牙利算法欲求完全二分图的最佳匹配,只要用匈牙利算法求其相等子图的完备匹配;问题是当标号之后的求其相等子图的完备匹配;问题是当标号之后的Gl无完备匹配时怎么办?无完备匹配时怎么办?1957年年Kuhn和和Munkras 给给出了一个解决该问题的有效算法,用出了一个解决该问题的有效算法,用逐次修改可行顶标逐次修
9、改可行顶标l(v)的办法使对应的相等子图之的办法使对应的相等子图之最大匹配逐次增广,最后出现完备匹配。最大匹配逐次增广,最后出现完备匹配。26KM算法算法l修改方法如下:修改方法如下:l先将一个未被匹配的顶点先将一个未被匹配的顶点u(u in x)做一次做一次增广路,记下哪些结点被访问那些结点没有增广路,记下哪些结点被访问那些结点没有被访问。求出被访问。求出d=minlxi+lyj-wi,j其中其中i结点被访问,结点被访问,j结点没有被访问。然后调整结点没有被访问。然后调整lx和和ly:对于访问过的:对于访问过的x顶点,将它的可行标顶点,将它的可行标减去减去d,对于所有访问过的,对于所有访问过
10、的y顶点,将它的可顶点,将它的可行标增加行标增加d。修改后的顶标仍是可行顶标,。修改后的顶标仍是可行顶标,原来的匹配原来的匹配M仍然存在,相等子图中至少出仍然存在,相等子图中至少出现了一条不属于现了一条不属于M的边,所以造成的边,所以造成M的逐渐的逐渐增广。增广。27KM算法算法l上述算法的证明也很容易上述算法的证明也很容易lKuhnMunkras算法流程:算法流程:l(1)初始化可行顶标的值初始化可行顶标的值l(2)用匈牙利算法寻找完备匹配用匈牙利算法寻找完备匹配l(3)若未找到完备匹配则修改可行顶标的值若未找到完备匹配则修改可行顶标的值l(4)重复重复(2)(3)直到找到相等子图的完备匹配
11、直到找到相等子图的完备匹配为止为止28作业:作业:l1325 Machine Schedule l2062 Card Game Cheater l2195 Going Home l2226 Muddy Fields 29附录:附录:l1 1 Place the Robots(ZOJ)l2 2 救护伤员(TOJ1148)l3 打猎l4 最小路径覆盖l5 一些例子l6 二部图相关的定义、定理30例题例题1 1 Place the Robots(ZOJ1654ZOJ1654)问题描述 有一个N*M(N,M=50)的棋盘,棋盘的每一格是三种类型之一:空地、草地、墙。机器人只能放在空地上。在同一行或同一
12、列的两个机器人,若它们之间没有墙,则它们可以互相攻击。问给定的棋盘,最多可以放置多少个机器人,使它们不能互相攻击。Wall Grass Empty31例题例题1 Place the Robots(ZOJ)模型一5467832112346578于是,问题转化为求图的最大独立集问题。在问题的原型中,草地,墙这些信息不是我们所关心的,我们关心的只是空地和空地之间的联系。因此,我们很自然想到了下面这种简单的模型:以空地为顶点,有冲突的空地间连边,我们可以得到右边的这个图:32例题例题1 Place the Robots(ZOJ)模型一5467832112346578在问题的原型中,草地,墙这些信息不是
13、我们所关心的,我们关心的只是空地和空地之间的联系。因此,我们很自然想到了下面这种简单的模型:以空地为顶点,有冲突的空地间连边,我们可以得到右边的这个图:这是NP问题!33我们将每一行,每一列被墙隔开,且包含空地的连续区域称作“块”。显然,在一个块之中,最多只能放一个机器人。我们把这些块编上号。同样,把竖直方向的块也编上号。例题例题1 Place the Robots(ZOJ)模型二12345123434例题例题1 Place the Robots(ZOJ)模型二123451234把每个横向块看作X部的点,竖向块看作Y部的点,若两个块有公共的空地,则在它们之间连边。于是,问题转化成这样的一个二部
14、图:11223344535由于每条边表示一个空地,有冲突的空地之间必有公共顶点,所以问题转化为二部图的最大匹配问题。例题例题1 Place the Robots(ZOJ)模型二12341235411223344536比较前面的两个模型:模型一过于简单,没有给问题的求解带来任何便利;模型二则充分抓住了问题的内在联系,巧妙地建立了二部图模型。为什么会产生这种截然不同的结果呢?其一是由于对问题分析的角度不同:模型一以空地为点,模型二以空地为边;其二是由于对原型中要素的选取有差异:模型一对要素的选取不充分,模型二则保留了原型中“棋盘”这个重要的性质。由此可见,对要素的选取,是图论建模中至关重要的一步。
展开阅读全文