二分图的学习:基础思路(杨)(剪辑版)

剪辑其他网友朋友的博文,谢谢他了!

匈牙利算法是解决寻找二分图最大匹配的。

(一)预备知识
    什么是二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同 的顶点集(i in A,j in B),则称图G为一个二分图。

什么是匹配:把上图想象成3男4女搞对象(无同性恋),连线代表彼此有好感,但最终只能1夫1妻,最终的配对结果连线就是一个匹配。匹配可以是空。
    什么是最大匹配:在有好感的基础上,能够最多发展几对。

现在要用匈牙利算法找出最多能发展几对。
[color=green][size=medium]
匈牙利算法是解决寻找二分图最大匹配的。

(二)匈牙利算法正文:
    匈牙利算法中有个非常非常最重要的概念叫做-交错路径,或者叫交错树,指的同一个东西。交错路径是这样的。现在有一个匹配如图黑线所示

则其交错路径为:

交错路径是对于一个匹配而言的,交错路径的起点和终点必须不是匹配中的点,而且匹配中的边在交错路径中交替出现。
    先给一个例子
    1、起始没有匹配

2、选中第一个x点找第一跟连线

3、选中第二个点找第二跟连线

4、发现x3的第一条边x3y1已经被人占了,找出x3出发的的交错路径x3-y1-x1-y4,把交错路中已在匹配上的边x1y1从匹配中去掉,剩余的边x3y1 x1y4加到匹配中去

5、同理加入x4,x5。
   
    匈牙利算法可以深度优先或者广度优先,刚才的示例是深度优先,即x3找y1,y1已经有匹配,则找交错路。若是广度优先,应为:x3找y1,y1有匹配,x3找y2。

二分图的学习:基础思路(杨)(剪辑版)

时间: 2024-08-15 03:58:16

二分图的学习:基础思路(杨)(剪辑版)的相关文章

《python基础教程(第二版)》学习笔记 字符串(第3章)

<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:%左侧是格式字符串,右侧是需要格式化的值print '%s=%d' % ('x',100) ==> x=100%% 格式字符串中出现 %模板字符串:from string import Templates=Template('$x is 100');  s.substitute(x='ABC');  ==> '

《Python基础教程(第二版)》学习笔记 -&gt; 第九章 魔法方法、属性和迭代器

准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here 在这两个类中,NewStyle是新式的类,OldStyle是旧式的类,如果文件以__metaclass__ = type 开始,那么两个类都是新式类. 构造方法 构造方法,当一个对象被创建后,会立即调用构造方法.Python中创建一个构造方法,只要把init方法的名字从简单的init修改成__init__

《Python基础教程(第二版)》学习笔记 -&gt; 第十章 充电时刻 之 标准库

SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])                退出当前的程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 平台标识符 stdin 标准输入流-- 一个类文件对象 stdout 标准输出流-- 一个类文件对象 stderr

《python基础教程(第二版)》学习笔记 字典(第4章)

<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),('key2','value2')]; d=dict(lst)d=dict(key1='value1', key2='value2')字典基本操作:d={'key1':'value1','key2':'value2'}; len(d) ==> 2 #字典中的键值对数量d={'key1':'value1','

《python基础教程(第二版)》学习笔记 基础部分(第1章)

<python基础教程(第二版)>学习笔记基础部分(第1章)IDEWindows: IDLE(gui), Eclipse+PyDev; Python(command line);Linux/Unix: python >>> 1/2=0 注意整除得0>>> from __future__ import division 执行普通的除法python -Qnew 执行普通的除法 //整除,  1//2=0:%取余数:**乘幂长整型数: 末尾带L十六进制,以0x开头

《Python基础教程 第2版&#183;修订版》 第2章 列表和元组(学习笔记&#183;总)

这章东西有点多,因此,分成了三份来写,总体来说,这章内容较基础,以下是一二三的链接 <Python基础教程 第2版·修订版>第2章 列表和元组(学习笔记·一) <Python基础教程 第2版·修订版>第2章 列表和元组(学习笔记·二) <Python基础教程 第2版·修订版>第2章 列表和原组 (学习笔记·三) 版权声明:本文为博主原创文章,未经博主允许不得转载.

《Python基础教程 第2版 修订版》学习笔记(一)

<Python基础教程 第2版 修订版>学习笔记(一) 第一章:快速改造:基础知识 1.1 安装Python (略) How to Become a Hacker: http://www.catb.org/~esr/faqs/hacker-howto.html 中文版:如何成为一名黑客 http://blog.jobbole.com/64196/ (伯乐在线版,个人认为目前比较完善的版本) 1.2 交互解释器 >>> 1.3 算法是什么 目标:煮一盘午餐肉加鸡蛋的食物 过程:

《Python基础教程第3版》PDF中英文+代码资料分享学习

<Python基础教程第3版>包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表.元组.字符串.字典以及各种语句:然后循序渐进地介绍了一些相对高级的主题,包括抽象.异常.魔法方法.属性.迭代器:此后探讨了如何将Python与数据库.网络.C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试.打包.发布等知识:最后,作者结合前面讲述的内容,按照实际项目开发的步骤向读者介绍了10个具有实际意义的P

数字电子技术基础(第六版)学习辅导与习题解答 阎石 王红 高等教育出版社

数字电子技术基础(第六版)学习辅导与习题解答 数字电子技术基础(第六版)闫石 版 课后答案 本书是为配合清华大学电子学教研组编.阎石主编的<数字电子技术基础(第六版)>教材的使用而编写的.内容包括:数字电子技术基础课程的特点和学习方法,各章内容的重点.难点释疑和解题方法,<数字电子技术基础(第六版)>习题解答,自测试卷及答案四部分. 本书除了可作为电气.电子信息类各专业本科生学习数字电子技术基础课程的辅助教材以外,也可供其他相关专业师生和社会读者参考. 第一部分 数字电子技术基础课