浅谈二分图的最大匹配和二分图的KM算法
二分图还可以,但是我不太精通。我感觉这是一个很烦的问题但是学网络流不得不学它。硬啃吧。
人比较蠢,所以思考几天才有如下理解。希望能说服我或者说服你。
二分图的判定不再赘述一个图是可被划分成一个二分图当且仅当其之中不存在奇环、
最大匹配:两点在一起这就是匹配而我们要求出一张图中的最大匹配。寻找增广路。
通俗一点就是不断看看哪个点还能向外延伸,对于一个点其找到一个匹配点那就匹配上去找不到的话就看看占用它的匹配点的点谁还能向外延伸如果可以就向外延伸一下。
上述就是非常简单明了的最大匹配求法。但是我时常会注意到这个算法的正确性,也就是说也就是说有增广路那便有了不存在谁占到当前位置更优的理论。
因为所有点匹配到某个点只有先来后到的关系没有谁比谁更优的道理。。
接下来是二分图带权匹配的KM算法:如果没有这个算法或许我会去学习费用流,或者直接爆搜。。但是虽然这个算法的局限性非常的大而且易忘 还是学习一下吧费不了多少时间。
具体看算法进阶指南。下面是我对KM算法的理解。多么痛的领悟。
KM算法的正确性:
1 KM算法要求的是图中最大权匹配是完备匹配也就是说都匹配上了。我想这个条件要不是题目中自己给出了,要不就是边权都是正值且每个点想其他点都有连边如本题,此时这个性质是可以被保证的。
2 这个算法是围绕着顶点的定标匹配的我来定性的描述这个算法的过程:首先每个点都和自己最大的边权进行匹配,然后发现有些点没有匹配对象的话更换交错树中定标的值然后再次寻找增广路。当然新能沟通的路是边权变化最小的。
3 经过我长期的研究我终于把我的反例证明出来了我的意思是指是否存在一种情况使得当前直接点匹配上比两个已匹配边更换匹配然后是当前点得到匹配更优,这个主意很容易走到这个误区经过我画的多张图我发现出现这种情况的是不存在完备匹配的情况的否则皆可以利用KM网上的证明方法来证明。
至于核心就是一张相等子图上的完备匹配就是最大的 可以这样来思考:比如在完备匹配还未形成之时由于最大权匹配是完备匹配所以当前肯定不是最优解。我们放出来一条边(或多条)对当前匹配边的权值影响最小的也就是最接近答案的一组边然后再次匹配直至达到完备匹配。为什么这样是最大的?可以证明这样做保证了最初匹配的边权一直没有丧失且一直不断加边,而且比加其他的边更优。
综上得到答案一定是最优的。如果你真的不理解那么就放弃吧这个局限性很大不如跑费用流。。
浅谈二分图的最大匹配和二分图的KM算法的更多相关文章
- 【模板】二分图最大权完美匹配(KM算法)/洛谷P6577
题目链接 https://www.luogu.com.cn/problem/P6577 题目大意 给定一个二分图,其左右点的个数各为 \(n\),带权边数为 \(m\),保证存在完美匹配. 求一种完美 ...
- 浅谈最长上升子序列(O(n*logn)算法)
今天GM讲了最长上升子序列的logn*n算法,但没讲思路... 我看了篇博客,发现-- 说的有道理!!! 首先,举例子: a[7]={1,2,4,3,6,7,5}(假设以1开头) 很明显,LIS=5: ...
- 算法笔记_137:二分图的最大匹配(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为二分图的最大匹配问题? 引用自百度百科: 首先得说明一下何为匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于 ...
- 《Machine Learning in Action》—— 浅谈线性回归的那些事
<Machine Learning in Action>-- 浅谈线性回归的那些事 手撕机器学习算法系列文章已经肝了不少,自我感觉质量都挺不错的.目前已经更新了支持向量机SVM.决策树.K ...
- Going Home(最大匹配km算法)
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20115 Accepted: 10189 Desc ...
- 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)
虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...
- hdu3729 I'm Telling the Truth (二分图的最大匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=3729 I'm Telling the Truth Time Limit: 2000/1000 MS (Java/ ...
- [HDOJ3718]Similarity(KM算法,二分图最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3718 题意:有一堆答题情况和正确答案,问每一个答题情况的正确率最大是多少. 给每一对答案和答题情况的字 ...
- POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)
题意 现在要将5种型号的衣服分发给n个参赛者,然后给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,再给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能 ...
随机推荐
- Netflix OSS套件一站式学习驿站
Netflix OSS是由Netflix公司主导开发的一套代码框架/库,目的是用于解决大规模集群的分布式系统的一连串问题,如:服务发现.负载均衡.熔断降级.限流.网关等.对于当代的Java开发者来说, ...
- java 中Object类中toString()的使用
1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() 2. Object类中toString()的定义: public String toString() { return ...
- Spring-Validation(数据校验) 你值得拥有
前言 最近看到很多童鞋在项目中的对请求参数的校验都用的if来判断各参数的属性,如: if(StringUtils.isBlank(username)){ return RR.exception(&qu ...
- 执行ArrayList的remove(object)方法抛异常?
简介 或许有很多小伙伴都尝试过如下的代码: ArrayList<Object> list = ...; for (Object object : list) { if (条件成立) { l ...
- MISC学习记录 (一)
A记录 题目 他在看什么视频,好像很好看,不知道是什么网站的. 还好我截取了他的数据包,找呀找. key就是网站名称.格式ctf{key} tip:A记录的第一条. 解题链接 过程 下载解题链接中的文 ...
- XSS 跨站脚本
xss常用绕过姿势 大小写绕过 利用语句: http://192.168.1.102/xss/example2.php?name=<sCript>alert("hey!" ...
- HTB::Postman
实验环境 渗透过程 0x01 信息搜集 masscan扫描 扫描结果目标服务开放了22(ssh),80(http),6379(redis),10000(webmin)端口 nmap扫描 nmap -s ...
- shell专题(三):Shell脚本入门
1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创建一个Shell脚本,输出helloworld (2)案例实操: [atgu ...
- redis(十二):Redis 集合(Set)
Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...
- Linux桌面进化史
自 20 世纪 90 年代初期以来,Linux 桌面也已从简单的窗口管理器发展为成熟.完整的桌面.那么它究竟是如何一步步发展至今的呢?作为从 1993 年就开始使用 Linux 的资深用户,FreeD ...