【图论】二分图

二分图(又称作二部图)

设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图

其实还有一个概念:

不存在奇数条边的简单回路。

 

最大匹配

给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配

选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem)

如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配

 

增广路(也称增广轨或交错轨)

若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径

 

交替路 

从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边...形成的路径叫交替路。

 

 

 

【匈牙利算法】——求最大匹配

推荐一个趣味解释匈牙利算法的链接:http://blog.csdn.net/dark_scope/article/details/8880547/

由增广路的定义可以推出下述三个结论:

1-P的路径长度必定为奇数,第一条边和最后一条边都不属于M。

2-P经过取反操作可以得到一个更大的匹配M’。

3-M为G的最大匹配当且仅当不存在相对于M的增广路径。

 1 bool find(int x)
 2     {  
 3     int i,j;  
 4     for (j=1;j<=m;j++){ 
 5         if (map[x][j]==true && visit[j]==false)        
 6          
 7         {  
 8             visit[j]=1;  
 9             if (match[j]==0 || find(match[j])) 
10             {   
11                 match[j]=x;  
12                 return true;  
13             }  
14         }  
15     }  
16     return false;  
17 }  

 

最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联;

最小边覆盖:用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点;

最大独立集:在N个点的图G中选出m个点,使这m个点两两之间没有边的点中,m的最大值。

证明参考:http://blog.csdn.net/huangshuai147/article/details/51087275

 

 

 

 

完。

 

2017-07-13 Hathaway

posted @ 2017-07-13 11:06  Hathawaxy  阅读(288)  评论(0编辑  收藏  举报