zoukankan      html  css  js  c++  java
  • 最大二分匹配

    一. 预备知识

    1. 匹配:图G=(V,E)中没有公共端点的一组边M

    • 匹配边:M中的边 
    • 自由边:E/M中的边
    • 被浸润的顶点:M中边的端点 
    • 未被浸润的顶点:其他顶点

     完美匹配:浸润G的个顶点的匹配

     最大匹配:边的条数达到最大值的匹配

    推论:完美匹配一定是最大匹配,反之未必

    2. 顶点覆盖:图G=(V,E)中的一个顶点子集C,E中条边都至少有一个端点在C中

     最小顶点覆盖:G的顶点个数最少的覆盖

    3. 推论:

    图G的最小顶点覆盖C和最大匹配M满足|M| <= |C| , 在二分图G中,|M|=|C|

    二.最大二分匹配问题

    方法1:(最大流的算法)

    • 问题转化

                            构建一个新的流网络G' 

    1 . 

    2.

    3. 为每条边赋予单位容量

    • 结论

    (1)图G的每个匹配对应图G'的一个流

    (2)图G的一个最大二分匹配对应图G'的最大流

    (3)最大二分匹配的基数 == 最大流| f |

    方法2:匈牙利算法

    1. 概念定义:

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

    (2)增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路

    2. 核心思想

    增广路有一个重要特点:非匹配边比匹配边多一条,因此,只要把增广路中的匹配边和非匹配边的身份交换即可。

    3. 算法过程

                        

    三. 应用:

    【任务安排问题】

    【素数伴侣文通】

  • 相关阅读:
    Exaple2_1(显示转换)
    Example2_4(数据的输入Scanner)
    安装jdk遇到的问题
    Java应用程序,用户从键盘只能输入整数,程序输出这些整数的乘积
    Hello.Java//Tom and Jerry
    Example2_3(数据输出System.out.printf)
    Example2_2(基本类型转换)
    c++与java的区别
    大龄屌丝自学笔记Java零基础到菜鸟004
    大龄屌丝自学笔记Java零基础到菜鸟003
  • 原文地址:https://www.cnblogs.com/duanshuai/p/13177695.html
Copyright © 2011-2022 走看看