`
yzmduncan
  • 浏览: 330434 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

二分图匹配(基础)

阅读更多

二分图:又叫二部图,图G中顶点集V可以分成互不相交的子集(X,Y),并且图中的每一条边所关联的点分别属于两个不同的顶点集,则图G叫二分图。(不含奇环)

二分图的匹配:给定一个二分图G的子图M,M的边集中任意两条边都不依附于同一个顶点(点单独配对),则称M是一个匹配。

二分图的最大匹配:边数最大的一个匹配就是二分图的最大匹配。

看上去二分图匹配好像没有什么用途,但以下三个定理会有大用处:

1.二分图的最小点覆盖(x或y中的都行) = 最大匹配;

2.二分图的最大独立集 = 顶点数 - 最大匹配;

(最大独立集是从图中找出最多的顶点数并且顶点两两之间没有边)

3.有向无环图的最小路径覆盖 = 顶点数- 最大匹配。


二分图最大匹配——匈牙利算法

   算法的思路是不停的寻找增广路(交错轨),并增加匹配的个数;增广轨的形式:第一条边未参与匹配,第二条边参与匹配,第三条边未参与匹配,...,最后一条边未参与匹配,显然它有奇数条边。那么对于这样一条路径,可以将它变为:第一条边参与匹配,第二条边未参与匹配,第三条边参与匹配,...,最后一条边参与匹配。匹配依然合法,但匹配数增加了一对。可以证明,当找不到增广轨时,就得到了最大匹配,这就是匈牙利算法的思路。

const int N = 50;
const int M = 50;
bool use[M];		//记录y中节点是否使用
int link[M];		//记录当前与y节点相连的x的节点:i未加入匹配时为link[i]==0
bool g[N][M];		//记录连接x和y的边,如果i和j之间有边则为1,否则为0
int gn,gm;			//二分图中x和y中点的数目

bool find(int v)		//对x中的结点v,找增广路径。
{
    int i;
    for(i = 1; i <= gm; i++)	//对结点v发出的每条边
    {
       if(g[v][i] && !use[i])
       {
           use[i] = true;
//如果y中的结点i还没有加入到匹配中(link[i]==0),可直接连线;
  //或者y加入到了匹配中,根据link[i]找到x中的结点v,根据v发出的边寻找另外一个未加入匹配结点y
  //找到就记录到link中,返回true;找不到返回false(即找增广路径)。
           if(link[i] == 0 || find(link[i]))
           {
              link[i] = v;
              return true;
           }
       }
    }
    return false;
}

int MaxMatch()			//找二分图的最大匹配数。
{
    int i,ans=0;
    for(i = 1; i <= gn; i++)
    {
       memset(use,0,sizeof(use));
       if(find(i)) ans++;
    }
	return ans;
}

 

    最小路径覆盖

    在有向无环图G中,找出最小的路径条数,使之覆盖所有顶点,且任意一个顶点有且只有一条路径与之关联。从这可以看出:

1.一个单独的顶点是一条路径;
2.如果存在一条路径p1,p2,...,pk,其中p1为起点,pk为终点,那么在覆盖图中,p1,p2,...,pk这些顶点不再与其它的顶点之间存在有向边。
最小路径覆盖就是找出最小的路径条数,使之覆盖所有点。
最小路径覆盖数 = P - 最大匹配数。(G必须是无环的有向图)
其中最大匹配数的求法是把G中的每个顶点pi分成两个顶点pi与pi',如果G中存在一条pi到pj的边,那么在二分图G'中就有一条连接pi'与pj'的无向边;这里pi'就是G中pi的出边,pj'就是G中pj的一条入边。
可以这样理解:
匹配数为0,那么图G中不存在有向边,显然有最小覆盖数=P-0=P。
如果在G'中增加一条匹配边pi'-->pj',那么在图G中就有pi-->pj在一条路径上,于是覆盖的路径数减1,如此增加,直到二分图的最大匹配,也就求出了最小路径覆盖。

 

分享到:
评论

相关推荐

    图匹配总结-二分图匹配

    整体来看,二分图匹配的知识点十分丰富,它不仅涵盖了图论中基础的图结构知识,还涉及到匹配理论、最大流理论以及高效算法的设计与实现。对于ACM编程竞赛中的图论题目,掌握二分图匹配的知识是解决许多问题的关键,...

    二分图最优匹配matlab代码.zip

    二分图最优匹配是图论中的一个重要概念,它在许多实际问题中有着广泛的应用,比如分配问题、网络流问题、任务调度等。在本压缩包中,提供的是一组使用MATLAB语言实现的二分图最优匹配算法代码。MATLAB作为一种强大的...

    二分图匹配及其运用.。。

    二分图匹配是一种重要的...总之,二分图匹配及其算法在图论和计算机科学中有诸多应用,从简单的配对问题到复杂的网络优化,都离不开这一基础理论。理解和掌握匈牙利算法及其扩展应用,能够帮助我们更好地解决实际问题。

    浅析二分图匹配在信息学竞赛中的应用.doc

    总的来说,二分图匹配是信息学竞赛中解决复杂问题的关键工具之一,它要求参赛者具备扎实的图论基础,良好的建模能力,以及灵活运用算法解决问题的技巧。通过学习和掌握二分图匹配,参赛者能够在面对各类优化问题时...

    matlab实现匈牙利算法二分图最大匹配的程序

    标题中的“matlab实现匈牙利算法二分图最大匹配的程序”指的是使用MATLAB编程语言来实现一种经典的图论算法——匈牙利算法,它主要用于解决二分图的最大匹配问题。二分图是一种特殊的图,其中的节点可以分为两个不...

    二分图匹配

    ### 二分图匹配 #### 一、基础知识与概念 **二分图**是一种特殊的图类型,其中顶点被划分为两个互不相交的集合(通常标记为X和Y),并且图中的每条边都连接来自不同集合的顶点。这种结构在计算机科学和数学中有...

    算法文档无代码浅析二分图匹配在信息学竞赛中的应用

    二分图匹配是一种在计算机科学特别是在图论领域中的基础问题,它主要涉及图的两个集合的顶点,并且图中每条边连接的两个顶点分别位于这两个不同的顶点集中。在信息学竞赛中,二分图匹配问题经常被作为题目的核心部分...

    二分图的最优匹配算法

    ### 二分图的最优匹配算法(KM算法) #### 算法背景及应用场景 ...KM算法是解决二分图最大权匹配问题的有效工具,其理论基础坚实且实际应用广泛。通过不断优化算法实现,可以在实际场景中更高效地解决问题。

    用匈牙利算法求二分图的最大匹配

    ### 匈牙利算法在二分图最大匹配中的应用 #### 一、引言 匈牙利算法是一种高效地解决二分图最大匹配问题的方法。它最初由Kőnig和Egerváry在20世纪30年代提出,并在后续的研究中不断完善。该算法不仅具有较高的...

    图的匹配 二分图 acm

    【图的匹配】是图论中...总之,图的匹配和二分图是图论中的基础概念,它们在算法设计和优化问题中有着广泛的应用。理解这些概念及其算法,对于解决实际问题,尤其是在计算机科学和数学竞赛(如ACM)中,具有重要意义。

    二分图及其应用(ACM 算法)

    二分图的最大匹配问题是寻找二分图中最多的一对对顶点,使得每对顶点之间有一条边相连,且任意两对顶点间的边不相交。这个问题在实际中有多种应用,比如婚姻匹配、作业分配、网络路由等。 匈牙利算法是解决二分图...

    二分图最大匹配km算法

    ### 二分图最大匹配KM算法详解 #### KM算法概览 KM算法(Kuhn-Munkres Algorithm),也称为匈牙利算法的扩展版本,主要用于解决带权二分图的最佳匹配问题。简单来说,二分图是一种特殊的图结构,它可以被划分为两个...

    二部图概述(二分图,匹配,覆盖,KM算法)

    二分图的最大匹配,匈牙利算法,最小点覆盖,DAG图的最小路径覆盖。二分图的最大独立集.二分图最优匹配.noi,acm,基础

    图论- 二分图- 二分图判定.rar

    二分图则是图论中的一个基础概念,具有广泛的应用,如匹配问题、网络流问题、社交网络分析等。在这个主题中,我们将深入探讨二分图及其判定方法。 二分图,也称为二部图或二分图解,是图的一个特殊类型。在二分图中...

    用匈牙利算法求二分图的最大匹配.doc

    - 图2展示了在这个匹配基础上找到的一条增广路径:3-&gt;6-&gt;2-&gt;5-&gt;1-&gt;4。 - 通过这条增广路径,将非匹配边(3-&gt;6, 2-&gt;5, 1-&gt;4)加入到匹配集合中,并移除匹配边(1-&gt;5, 2-&gt;6),得到新的匹配:[3, 6], [2, 5], [1, 4]。...

    算法学习:图论之用匈牙利算法求二分图的最大匹配.doc

    - **增广路径**:在一个二分图的当前匹配基础上,一条从左部未匹配节点到右部未匹配节点的路径,该路径满足以下条件: - 路径长度为奇数。 - 路径上的点交替地来自左右两个子集。 - 路径上的边交替地不在当前匹配...

    图论- 二分图.rar

    二分图是图论中的一个重要概念,它是图论研究的基础之一,广泛应用于计算机科学、运筹学、社会科学等多个领域。本资料"图论- 二分图.rar"包含的PDF文档详细介绍了二分图的基本理论及其应用。 首先,我们要了解什么...

    二分图题解1

    题目E "二分图关系增长" 提到的是一种二分图匹配优化问题,需要在已知匹配方案的基础上找到最大化匹配权值的增长,并确定最小改动的边数。这类问题通常需要运用匈牙利算法或者Kuhn-Munkres算法等高级技术进行求解,...

    二分图介绍-------------需求下载

    二分图是图论中的一个重要概念,它在计算机科学,特别是算法设计中有着广泛的应用。在二分图中,图的顶点可以被分成两个不相交的集合...通过研究这些材料,你可以更好地掌握二分图的理论基础,提高解决实际问题的能力。

Global site tag (gtag.js) - Google Analytics