



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这几天断断续续学了二分图的匹配算法,学会了二分图的最大匹配的hungary算法和求二分图的最佳匹配的KM算法.二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合,另一个属于集合。hungary算法就是一个不断找增广轨的过程.下面是网上找到的一个比较好的解释,很容易理解,结合程序就能掌握算法的思想了:算法的思路是不停的找增广轨,并增加匹配的个数,增广轨顾名思义是指一条可以使匹配数变多的路径,在匹配问题中,增广轨的表现形式是一条交错轨,也就是说这条由图的边组成的路径,它的第一条边是目前还没有参与匹配的,第二条边参与了匹配,第三条边没有.最后一条边没有参与匹配,并且始点和终点还没有被选择过.这样交错进行,显然他有奇数条边.那么对于这样一条路径,我们可以将第一条边改为已匹配,第二条边改为未匹配.以此类推.也就是将所有的边进行反色,容易发现这样修改以后,匹配仍然是合法的,但是匹配数增加了一对.另外,单独的一条连接两个未匹配点的边显然也是交错轨.可以证明,当不能再找到增广轨时,就得到了一个最大匹配.这也就是匈牙利算法的思路.hungary算法适合解决的问题:1.最大匹配(=,=显然.)2.完美匹配3.点覆盖(最小覆盖问题)4.最小路径覆盖5.最大独立集问题参考网上的代码写的一个算法,好像用的人蛮多的#define N 100int bmNN,linkN,vN;int n,m;int path(int t) int i; for(i=1;i=m;i+) if(!vi & bmti) vi=1; if(!linki | path(linki) linki=t; return 1; return 0;int maxmatch() int i,c=0; memset(link,0,sizeof(link); for(i=1;i=n;i+) memset(v,0,sizeof(v); if(path(i) c+; return c;二分图的最佳匹配:算法是理解了,可是定理没有证明=,=.哎,这就是工科生和理科生的区别.【最优完备匹配】对于二分图的每条边都有一个权(非负),要求一种完备匹配方案,使得所有匹配边的权和最大,记做最优完备匹配。(特殊的,当所有边的权为1时,就是最大完备匹配问题)KM算法:(全称是Kuhn-Munkras,是这两个人在1957年提出的,有趣的是,匈牙利算法是在1965年提出的)为每个点设立一个顶标Li,先不要去管它的意义。设vi,j为(i,j)边的权,如果可以求得一个完备匹配,使得每条匹配边vi,j=Li+Lj,其余边vi,jLi+Lj。此时的解就是最优的,因为匹配边的权和=Li,其余任意解的权和都不可能比这个大定理:二分图中所有vi,j=Li+Lj的边构成一个子图G,用匈牙利算法求G中的最大匹配,如果该匹配是完备匹配,则是最优完备匹配。(不知道怎么证明)问题是,现在连Li的意义还不清楚。其实,我们现在要求的就是L的值,使得在该L值下达到最优完备匹配。L初始化:Li=maxwi,j(ix,jy)Lj=0建立子图G,用匈牙利算法求G的最大匹配,如果在某点i (ix)找不到增广轨,则得不到完备匹配。此时需要对L做一些调整:设S为寻找从i出发的增广轨时访问的x中的点的集合,T为访问的y中的点的集合。找到一个改进量dx,dx=minLi+Lj-wi,j(iS,j不T)Li=Li-dx (iS)Li=Li+dx (iT)重复以上过程,不断的调整L,直到求出完备匹配为止。从调整过程中可以看出:每次调整后新子图中在包含原子图中所有的边的基础上添加了一些新边。每次调整后Li会减少dx,由于每次dx取最小,所以保证了解的最优性。复杂度分析:设n为点数,m为边数,从每个点出发寻找增广轨的复杂度是O(m),如果找不到增广轨,对L做调整的复杂度也是O(m),而一次调整或者找到一条增广轨,或者将两个连通分量合成一个,而这两种情况最多都只进行O(n)次,所以总的复杂度是O(nm)扩展:根据KM算法的实质,可以求出使得所有匹配边的权和最小的匹配方案。L初始化:Li=minwi,j(ix,jy)Lj=0dx=minwi,j-Li-Lj(iS,j不T)Li=Li+dx (iS)Li=Li-dx (iT)【最优匹配】与最优完备匹配很相似,但不必以完备匹配为前提。只要对KM算法作一些修改就可以了:将原图转换成完全二分图(m=|x|y|),添加原图中不存在的边,并且设该边的权值为0。也是借用了别人的模板,我认为时间效率还不错自己稍加修改在用,等以后自己写个.int path(int u)sxu=1;int v;for(v=0;vn;v+) if(!syv&lxu+lyv=wuv) syv=1; if(linkv=-1 | path(linkv) linkv=u; return 1; return 0;int maxmatch(int maxsum) int i,j,u;if(!maxsum) for(i=0;in;i+) for(j=0;jn;j+) wij=-wij;for(i=0;in;i+) lxi=-0x1fffffff; lyi=0; for(j=0;jn;j+) if(lxiwij) lxi=wij;memset(link,-1,sizeof(link);for(u=0;un;u+) while(1) memset(sx,0,sizeof(sx); memset(sy,0,sizeof(sy); if(path(u) break; int dx=0x7fffffff; for(i=0;in;i+) if(sxi) for(j=0;jn;j+) if(!syj) dx=min(lxi+lyj-wij,dx); for(i=0;in;i+) if(sxi) lxi-=dx; if(syi) lyi+=dx; int sum=0;for(i=0;in;i+) sum+=wlinkii;if(!maxsum) sum=-sum; for(i=0;in;i+) for(j=0;jn;j+) wij=-wij;return sum;至于一般图的最优匹配,还没遇到过这样的题.不是很想写(我真阿Q.),等以后再perfect一下吧那,就这样了.拖了几天的集训明天正式开始了,说实话,有点紧张-实在是太挫了点啊.要好好奋斗了,不然什么资本都没了.紧张之余也有期待,mmd说会安排老队员讲课,之前发在bbs上的论文我都下下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年无人机驾驶员职业技能考核试卷及答案(无人机遥控操作)
- 2025年电梯维修工程师资格考试试题及答案解析
- 高校合同审计报告模板(3篇)
- 高清柔性屏采购合同模板(3篇)
- 高空瓦匠施工合同范本(3篇)
- 爱婴医院考试试题及答案
- 卫生健康委员会疾病预防控制体系建设合同
- 汽修厂汽车维修工人劳动合同与职业发展规划
- 专业市场店铺股份收购及供应链整合协议
- 地下商场商铺产权转让协议
- GB/T 22654-2008蒸汽疏水阀技术条件
- 医院公章管理规定
- (完整版)高中物理必修一第一章测试题及答案
- 岁儿童行为量表CBCL
- VTE防治护理手册
- 小儿支气管哮喘-羽课件
- 新北师大版二年级上册数学 课桌有多长 教学课件
- 管道沟槽开挖安全安全技术交底
- 案件(线索)移送登记表
- 2021年全国质量奖现场汇报材料课件
- 《组织学与胚胎学》课件02细胞
评论
0/150
提交评论