二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是递归的方式以便于理解,然而迭代的方式会更好,各位可以自行实现。 1、二分图、最大匹配 什么是二分图: ...
分类:
编程语言 时间:
2016-06-11 15:48:34
阅读次数:
849
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 等等,看得头大?那么请看下面的版本: 通过数代人的努力,你终于赶上了剩男剩女的大潮, ...
分类:
编程语言 时间:
2016-06-10 16:24:34
阅读次数:
172
题材大多来自网络,本篇由神犇整理 基本概念—二分图 二分图:是图论中的一种特殊模型。若能将无向图G=(V,E)的顶点V划分为两个交集为空的顶点集,并且任意边的两个端点都分属于两个集合,则称图G为一个为二分图。 匹配:一个匹配即一个包含若干条边的集合,且其中任意两条边没有公共端点。如下图,图3的红边即 ...
分类:
编程语言 时间:
2016-06-10 16:22:55
阅读次数:
275
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。 二分图:简单来说,如果图中点可 ...
分类:
编程语言 时间:
2016-06-06 12:01:23
阅读次数:
277
标识符命名法标识符命名法最要有四种:1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写3 下划线命名法:单词与单词间用下划线做间隔。4 匈牙利命名法:广泛应用于微软编程环境中,在以Pa ...
分类:
移动开发 时间:
2016-06-05 18:42:16
阅读次数:
286
最大匹配数:最大匹配的匹配边的数目
最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择
最大独立数:选取最多的点,使任意所选两点均不相连
最小路径覆盖数:对于一个 DAG(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长可以为0(即单个点)。
定理1:最大匹配数 = 最小点覆盖数(这是 Konig 定理)
定理2:最大匹配数 = 最大独立数
定理3:最小...
分类:
编程语言 时间:
2016-06-02 14:36:16
阅读次数:
219
无向图匈牙利算法求地的值除以2才是答案,因为每个边都匹配了两次,有向图算法得出的就是答案。 ...
分类:
编程语言 时间:
2016-05-23 18:49:48
阅读次数:
261
首先,匈牙利算法是用来求二分图的最大匹配的,它的核心问题就是找增广路径。匈牙利算法的时间复杂度为O(VE),其中 V为二分图左边的顶点数,E为二分图中边的数目。 现在我们来看看增广路径有哪些性质: (1)有奇数条边。 (2)起点在二分图的左半边,终点在右半边。(存疑?) (3)路径上的点一定是一个在 ...
分类:
编程语言 时间:
2016-05-21 21:36:24
阅读次数:
137
$ 、字母、下划线开头都行,后面的可以是数字、字母、下划线; 匈牙利命名法、Camel命名法与Pascal命名法 匈牙利命名法、Camel命名法与Pascal命名法 匈牙利命名法:在Windows编程中使用非常普遍,由微软的一位匈牙利程序员提出。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标 ...
分类:
编程语言 时间:
2016-05-18 00:25:12
阅读次数:
206