求带边权2分图最大匹配

求带边权2分图最大匹配

ID:20126157

大小:36.00 KB

页数:5页

时间:2018-10-08

求带边权2分图最大匹配_第1页
求带边权2分图最大匹配_第2页
求带边权2分图最大匹配_第3页
求带边权2分图最大匹配_第4页
求带边权2分图最大匹配_第5页
资源描述:

《求带边权2分图最大匹配》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、求二部图的最大权匹配的两个算法一、求最大权二分匹配的KM算法http://tianyi.yo2.cn/%e6%b1%82%e6%9c%80%e5%a4%a7%e6%9d%83%e4%ba%8c%e5%88%86%e5%8c%b9%e9%85%8d%e7%9a%84km%e7%ae%97%e6%b3%95/最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大。解决这个问题可以用KM算法。理解KM算法需要首先理解“可行顶标”的概念。可行顶标是指关于二分图两边的每个点的一个值lx[i]或ly[j],保证对于每条边w[i][j]都有lx[i]+ly[j]-w

2、[i][j]>=0。如果所有满足lx[i]+ly[j]==w[i][j]的边组成的导出子图中存在一个完美匹配,那么这个完美匹配肯定就是原图中的最大权匹配。理由很简单:这个匹配的权值之和恰等于所有顶标的和,由于上面的那个不等式,另外的任何匹配方案的权值和都不会大于所有顶标的和。但问题是,对于当前的顶标的导出子图并不一定存在完美匹配。这时,可以用某种方法对顶标进行调整。调整的方法是:根据最后一次不成功的寻找交错路的DFS,取所有i被访问到而j没被访问到的边(i,j)的lx[i]+ly[j]-w[i][j]的最小值d。将交错树中的所有左端点的顶标减小d,右端点的顶标增加d。经过这样的调整

3、以后:原本在导出子图里面的边,两边的顶标都变了,不等式的等号仍然成立,仍然在导出子图里面;原本不在导出子图里面的边,它的左端点的顶标减小了,右端点的顶标没有变,而且由于d的定义,不等式仍然成立,所以他就可能进入了导出子图里。初始时随便指定一个可行顶标,比如说lx[i]=max{w[i][j]

4、j是右边的点},ly[i]=0。然后对每个顶点进行类似Hungary算法的find过程,如果某次find没有成功,则按照这次find访问到的点对可行顶标进行上述调整。这样就可以逐步找到完美匹配了。值得注意的一点是,按照上述d的定义去求d的话需要O(N^2)的时间,因为d需要被求O(N^2)次,

5、这就成了算法的瓶颈。可以这样优化:设slack[j]表示右边的点j的所有不在导出子图的边对应的lx[i]+ly[j]-w[i][j]的最小值,在find过程中,若某条边不在导出子图中就用它对相应的slack值进行更新。然后求d只要用O(N)的时间找到slack中的最小值就可以了。如果是求最小权匹配,只需要把那个不等式反一下就行了。算法需要作出的改变是:lx的初值为所有临界边中的最小值,find中t反号。示例程序(Ural1076):http://files.myopera.com/dd-usaco/cpp/ural1076.cpp二、求带边权2分图的最大匹配【http://www.

6、phpos.org/article-show-13566.html】·输入正整数N,然后是N*N个正整数,表示边权邻接矩阵。coldfusion输出求解过程。  /*   Problem : Weighted Bipartite Matching Algorithm : Hungarian Algorithm Reference : Douglas B.West,Introduction to Graph Theory,125-129    Author : PC      Date : 2005.2.23 */  #include  #include 

7、omanip.h> #include  #include   ifstream fin("input.txt"); #define cin fin  const int max=50; bool T[max],R[max],visited[max]; int U[max],V[max],gt[max][max],x[max],y[max]; int N;  void output() {         int i,j;         for(i=0;i

8、

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。