zoukankan      html  css  js  c++  java
  • 二分图匹配 学习笔记

     二分图,顾名思义,其点可以分成两部分,而与之相连的边一定是由一部分连向另一部分的。特殊的,树也是一种二分图。

    实际上,如果设图G=(V,E)是一个无向图,并且点集V可分割为两个互不相交的子集V1,V2,那么称此图G为二分图。

    而匹配一词,用比较正规的话来说,是一个边的集合,其中任意两条边都没有公共点。

    匹配边:在一个匹配中的边

    匹配点:匹配边相连的点

    非匹配边:not 匹配边

    非匹配点:not 匹配点

    最大匹配:一个图中所有匹配中最大的那个

    完美匹配:一个图中所有点都是匹配点,这个匹配就是完美匹配

    如果我们要在一个图里求最大匹配,一个显然的暴力做法是枚举每一个可能的匹配并维护最大值。这个算法的时间复杂度高到上天。

    实际上, 我们可以用匈牙利算法来求一个叫做增广路的东西,以此来求最大匹配。

    说增广路之前先说什么叫交替路。 交替路指的是一个这样的路径,从一个非匹配点出发,交替经过匹配边和非匹配边。 增广路指的是从一个非匹配点出发,走交替路,如果途径另外一个非匹配点,这条交替路就称为增广路。

    增广路有很多性质,这里不讨论。

    我们说一下匈牙利算法。

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。

    通俗的讲,这是一个绿与被绿的过程(逃

    在我学习匈牙利算法的时候,我看到一个非常生动形象的图,我把它贴在这,大家可以看看

    上面那个图就是一个二分图。匈牙利算法是一个基于dfs的过程,只需要枚举一遍第一个集合里的所有点,在所有点都做一次dfs就可以。

    首先a去找1,然后b试图找1发现a已经和1配对了,并且a不能去找其他人,所以b不能找1,b要去找2.然后c试图找2,同时c发现就算c连了2也不会影响b,因为b还可以连3.此时连接完毕,算法结束。

    超简单的是吧= =

  • 相关阅读:
    CORS enabled image (Miscellaneous) – HTML 中文开发手册
    PHP fread() 函数
    iswcntrl (Strings) – C 中文开发手册
    HTML DOM createComment() 方法
    HTML draggable 事件属性
    HTML table border 属性
    dedecms开启多站点
    SVN中trunk,branches,tags用法详解
    docker:搭建lamp应用
    centos安装samba
  • 原文地址:https://www.cnblogs.com/OIerShawnZhou/p/7758145.html
Copyright © 2011-2022 走看看