Blossom算法,开花算法简单理解
有条件的建议去油管上看,讲的很清楚https://www.youtube.com/watch?v=3roPs1Bvg1Q
引例:如果你是夏令营负责人,你的任务是将一群人分为两组。为了公平起见,每个人在卡片上写下了自己希望匹配的人,根据这些卡片,你要尽可能让希望彼此在一起的人更多。
1 基本概念
开花算法用于图中最大匹配的计算,为了方便理解我们给出几个概念:
1.1 匹配
若G=(V,E)是无向图,边集M属于E,M中任意两边均不相邻,M是G的匹配。下图黄色部分就是一个匹配。
1.2 渗透点
顶点v和M中边关联,则v为渗透点,否则为非渗透点。图中橙色即为非渗透点,也是在寻找最大路径要用到的。
1.3 交错路径
M是G的一个匹配,M的交错路径是匹配路径和非匹配路径交替构成,长度可以为1。白色路径为未匹配路径,黄色为匹配路径。
1.4 增广路径
增广路径是起点和终点都是非渗透点的交错路径。主要用于改进匹配。增广路径理论上来说应该比最短路径要短。
紫色部分是当前黄色匹配的增广路径。
增广路径顾名思义,可以通过切换匹配和不匹配的边来增加匹配的大小。如图所示,修改非匹配边后,匹配仍然有效,但是黄色路径增加1。
1.5 Berge定理
M是G的最大匹配的充要条件是G不包含M增长路径。可以通过增广路经反复修改,直到没有增广路径,即找到最大的匹配。
2 树
下面我们介绍如何在树上进行开花算法:
初始匹配为空,所有节点都是非渗透点。随机选取一个非渗透点,进行BFS广度优先搜索,交替添加匹配和不匹配的边。
然后使用增广路径反复匹配,直到没有剩余路径即可。
3 图
我们先看一下开花算法不适用的情况,假设我们已经找到一个匹配,希望对其进行改进达到最大匹配。
但在这张图里增广路径比最短路径要长,所以无法实现
此处,增广路径分为开花(blossom)和茎(stem)。开花和茎如下图所示,茎是一个以非渗透节点结束的交替路径。
为了解决这个问题,当我们从茎进入花时,采用以下措施:
(1)把花收缩,变成渗透点
(2)在收缩图寻找增广路径
(3)增加匹配
(4)把路径变为原始图,即开花
上述步骤成立的条件是,图具有增广路径,收缩图也具有增广路径。
具体算法如下:
时间复杂度方面,朴素算法是,开花算法是
Blossom算法,开花算法简单理解相关推荐
- 人工智能:深度学习算法及应用——简单理解CNN卷积神经网络并python实现(带源码)
深度学习算法及应用 一. 实验目的 二. 实验要求 三. 实验的硬件.软件平台 四. 实验原理 1.1. 深度学习概述 1.2. 深度学习的常见结构 1.3. 卷积神经网络(CNN) **卷积** * ...
- CPD配准算法及代码的简单理解(Coherent Point Drift)
我的毕业设计用到了CPD算法,以及CPD代码工具包,当时刚开始接触CPD时在网上没找到几篇教程或是经验总结的东西.现在毕设做完了,就结合我的理解写一篇文章.可能写的会有点乱,因为我也是一时兴起想要做一 ...
- 协同过滤算法的简单理解《推荐系统实践》
协同过滤算法的简单理解 本文主要是讲解一下<推荐系统实践>中UserCF和ItemCF这两种基于领域的推荐算法,写出自己的理解. UserCF(基于用户的协同过滤算法) 这种推荐算法的出发 ...
- 直观地简单理解Tarjan算法(寻找有向图中的强连通图)
简单理解Tarjan算法 按照百度百科的播报应该是读成['ta:rdʒən]?看过了几篇网络上的解释虽然都讲得比较具体但刚开始都难以理解,所以打算写一个更直观的理解方式. Tarjan算法是求 ...
- 开花算法_数据科学即将开花,但其根源已经存在了很长时间
开花算法 "The future of data analysis can involve great progress, the overcoming of real difficulti ...
- 深度学习中7种最优化算法的可视化与理解
作者丨小小鱼@知乎 来源丨https://zhuanlan.zhihu.com/p/41799394 本文旨在优化一维函数,实际上模型参数有数百万维以上,差距很大,因此本文最好作为辅助法的理解,而非对 ...
- 对算法的时间复杂度的理解
"算法(algorithm)是为求解一个问题需要遵循的,被清楚地指定的简单指令集合." 算法设计时,很重要的一步需要确定其占用的空间资源和时间资源,如果一个算法执行需要很长的时间, ...
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- Gillespie算法的Python简单实现(实例)
Gillespie算法的Python简单实现(实例) 文章目录 Gillespie算法的Python简单实现(实例) 前言 一.Gillespie是什么? 二.题目 三.代码 1.引入库 2.类定义 ...
最新文章
- GitHub怎样fork别人代码到自己仓库并进行贡献
- c语言指针底层实现,C语言二级指针底层实现
- 用固定收敛标准网络的迭代次数比较两张图片的相似度
- 产品设计 | App功能设计的21条注意事项
- 为什么只推荐入主流版本华强北耳机?
- 技术要求→物理安全→防盗窃和防破坏
- 客户连接多个服务端_Linux 服务端最大并发数是多少?
- Windows IP测试小脚本
- TensorFlow 深度学习实战指南中文版
- 会议家用多面手!智能微型投影设备导购
- 【Ardunio】开发入门教程【二】数据类型
- kaldi在java中运行_Kaldi语音识别CVTE模型实战
- Pillow为图片添加水印
- 计算机基础——4.1 数字通信入门
- 教师资格综合素质知识要点记录
- 算法特训营第2周刷题题目
- ESP-MESH 无线组网,让智能家居通信更方便 | ESP32轻松学(Arduino版)
- CentOS 7 解决网络不可用问题
- 大数据_——利用hive仓库模拟数据进行日活、日新、留存数据的分析统计(详细代码步骤)
- 医学图像领域,是时候用视觉Transformer替代CNN了吗?