欢迎来到天天文库
浏览记录
ID:59301702
大小:47.00 KB
页数:6页
时间:2020-09-06
《Kuhn-Munkres算法(二分图最大权匹配)===.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Kuhn-Munkres算法(二分图最大权匹配)二分图如果是没有权值的,求最大匹配。则是用匈牙利算法求最大匹配。如果带了权值,求最大或者最小权匹配,则必须用KM算法。 其实最大和最小权匹配都是一样的问题。只要会求最大匹配,如果要求最小权匹配,则将权值取相反数,再把结果取相反数,那么最小权匹配就求出来了。 KM算法及其难理解。。。看了几天还无头绪。 先拿上一直采用的KM算法模板,按照吉林大学的模板写的。试试了好多次感觉都没有出错。 /*************************************************
2、*****二分图最佳匹配(kuhnmunkras算法O(m*m*n)).邻接矩阵形式。返回最佳匹配值,传入二分图大小m,n邻接矩阵mat,表示权,match1,match2返回一个最佳匹配,为匹配顶点的match值为-1,一定注意m<=n,否则循环无法终止,最小权匹配可将全职取相反数。初始化:for(i=0;i3、include#defineMAXN310#defineinf1000000000#define_clr(x)memset(x,-1,sizeof(int)*MAXN)intKM(intm,intn,intmat[][MAXN],int*match1,int*match2){ints[MAXN],t[MAXN],l1[MAXN],l2[MAXN];intp,q,i,j,k,ret=0;for(i=0;il1[i]?mat[i][j]:l1[i];i4、f(l1[i]==-inf)return-1;}for(i=0;i=0;j=p){match2[j]=k=t[j];p=ma5、tch1[k];match1[k]=j;}}}}}if(match1[i]<0){i--;p=inf;for(k=0;k<=q;k++){for(j=0;j6、 下面是从网上的博客摘抄的一些零散的总结。。。。。 [二分图带权匹配与最佳匹配]什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。二分图的带权匹配与最佳匹配不等价,也不互相包含。这两个的关系比较悬乎。我的理解就是带权匹配是不考虑是不是完备,只求最大或最小权匹配。而最佳匹配则必须在完备匹配的基础上找最大或最小权匹配。这两个还是结合具体题目比较好理解些。 KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将7、所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。 KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。 KM算法求得的最大权匹配是边权值和最大,如果我想要边权之积最大,又怎样转化?还是不难办到,每条边权取自然对数,然后求最大和权匹配,求得的结果a再算出e^a就是最大积匹配。至于精度问题则没有更好的办法了。 二分图最优匹配:对于二分图的每条边都有一个权(非负),要求一种完备匹配方案,使得所有匹配边的权和最大,记做最优完备匹配。(特殊的,当所有边的权为1时,就是最大完
3、include#defineMAXN310#defineinf1000000000#define_clr(x)memset(x,-1,sizeof(int)*MAXN)intKM(intm,intn,intmat[][MAXN],int*match1,int*match2){ints[MAXN],t[MAXN],l1[MAXN],l2[MAXN];intp,q,i,j,k,ret=0;for(i=0;il1[i]?mat[i][j]:l1[i];i
4、f(l1[i]==-inf)return-1;}for(i=0;i=0;j=p){match2[j]=k=t[j];p=ma
5、tch1[k];match1[k]=j;}}}}}if(match1[i]<0){i--;p=inf;for(k=0;k<=q;k++){for(j=0;j6、 下面是从网上的博客摘抄的一些零散的总结。。。。。 [二分图带权匹配与最佳匹配]什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。二分图的带权匹配与最佳匹配不等价,也不互相包含。这两个的关系比较悬乎。我的理解就是带权匹配是不考虑是不是完备,只求最大或最小权匹配。而最佳匹配则必须在完备匹配的基础上找最大或最小权匹配。这两个还是结合具体题目比较好理解些。 KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将7、所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。 KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。 KM算法求得的最大权匹配是边权值和最大,如果我想要边权之积最大,又怎样转化?还是不难办到,每条边权取自然对数,然后求最大和权匹配,求得的结果a再算出e^a就是最大积匹配。至于精度问题则没有更好的办法了。 二分图最优匹配:对于二分图的每条边都有一个权(非负),要求一种完备匹配方案,使得所有匹配边的权和最大,记做最优完备匹配。(特殊的,当所有边的权为1时,就是最大完
6、 下面是从网上的博客摘抄的一些零散的总结。。。。。 [二分图带权匹配与最佳匹配]什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。二分图的带权匹配与最佳匹配不等价,也不互相包含。这两个的关系比较悬乎。我的理解就是带权匹配是不考虑是不是完备,只求最大或最小权匹配。而最佳匹配则必须在完备匹配的基础上找最大或最小权匹配。这两个还是结合具体题目比较好理解些。 KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将
7、所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。 KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。 KM算法求得的最大权匹配是边权值和最大,如果我想要边权之积最大,又怎样转化?还是不难办到,每条边权取自然对数,然后求最大和权匹配,求得的结果a再算出e^a就是最大积匹配。至于精度问题则没有更好的办法了。 二分图最优匹配:对于二分图的每条边都有一个权(非负),要求一种完备匹配方案,使得所有匹配边的权和最大,记做最优完备匹配。(特殊的,当所有边的权为1时,就是最大完
此文档下载收益归作者所有