当前位置:网站首页>【学习笔记】一般图最大匹配
【学习笔记】一般图最大匹配
2022-08-11 10:38:00 【OneInDark】
带花树算法
带花树?错了,是开花算法( Blossom Algorithm \text{Blossom Algorithm} Blossom Algorithm)。
在维基百科上有漂亮的图片。 OI-wiki \text{OI-wiki} OI-wiki 中也是使用的这些图片。
在 C F \rm CF CF 的帖子里有很好的叙述,可供参考。
称邻边都未匹配的点为 e x p o s e d \rm exposed exposed,裸露的。首先,最大匹配等价于图中没有增广路,其中增广路是两个端点都 e x p o s e d \rm exposed exposed 且路径上的边的匹配情况交错。并且增广不会让之前不能增广的裸露点变得可增广,否则两条增广路的对称差(的俩连通块之一)是原本就可行的增广路。
因此我们可以从每个裸露点开始,找增广路。走增广路过程中走出的奇环被称作花( blossom \text{blossom} blossom)。花上没有裸露点,且仅有一个点的两条环上邻边都未匹配,称为花心。那么所有经过花的增广路必然经过花心。而且,花心到花上点有两种走法,必有其中之一能使得路径交错。因此花可以被 c o n t r a c t \rm contract contract 。
缩 b l o s s o m \rm blossom blossom 会嵌套;没有花时,图是二部图,增广路可以求解。
难点大概在于,怎样得到原图上的增广路。精细实现的复杂度应该可以做到 O ( n 3 ) \mathcal O(n^3) O(n3),但因为我没实现过,所以我也不清楚。
线性代数做法
可见 C F \rm CF CF 帖子的评论区,和 2017 2017 2017 年论文《基于线性代数的一般图匹配》。引入 Tutte \text{Tutte} Tutte 矩阵 A ~ ( G ) \tilde A(G) A~(G) 满足
A ~ i , j = { x i , j e i , j ( i < j ) 0 ( i = j ) − x j , i e j , i ( j < i ) \tilde A_{i,j}=\begin{cases} x_{i,j}e_{i,j} &(i<j)\\ 0 &(i=j)\\ -x_{j,i}e_{j,i} &(j<i) \end{cases} A~i,j=⎩⎨⎧xi,jei,j0−xj,iej,i(i<j)(i=j)(j<i)
其中 e i , j e_{i,j} ei,j 表示 i , j i,j i,j 之间是否有连边,而 x i , j x_{i,j} xi,j 是形式变元。
动机是 det A ~ ≠ 0 \det\tilde A\ne 0 detA~=0 足以说明图中有完美匹配。因为行列式的定义相当于作环覆盖,存在奇环时,将环反向可以使值抵消;不存在奇环时,可以构造出匹配。
判定 det A ~ ≠ 0 \det\tilde A\ne 0 detA~=0 利用随机化赋值,根据 Schwartz–Zippel \text{Schwartz–Zippel} Schwartz–Zippel 引理,错误的概率不超过 deg det A ~ p = O ( n p ) {\deg\det\tilde A\over p}=\mathcal O({n\over p}) pdegdetA~=O(pn) 可以接受,其中 F p \mathbb{F}_p Fp 为随机范围。
考虑最大匹配。只需找出列 r a n k \rm rank rank,因为这些位置构成的主子式非零(别忘了 A ~ \tilde A A~ 是 斜对称 的)。所以,求最大匹配的值,已经有了 O ( n ω ) \mathcal O(n^\omega) O(nω) 的做法。
Comment. 其中 O ( n ω ) \mathcal O(n^\omega) O(nω) 表示矩阵乘法 / / / 消元的复杂度。
Remark. 消元可以和矩阵乘法做到相同复杂度,但不是高斯消元。而且具体实现我也不会,据称巨复杂。所以我们也可以不管它
同时我们证明了 det A ~ ≠ 0 \det\tilde A\ne 0 detA~=0 必然有 2 ∣ n 2\mid n 2∣n 。因为必须避免奇环。
构造解,不妨假定 det A ~ ≠ 0 \det\tilde A\ne 0 detA~=0 。有个神奇的性质是
det A { i } , { j } ≠ 0 * det A { i , j } , { i , j } ≠ 0 \det A^{\{i\},\{j\}}\ne 0\iff\det A^{\{i,j\},\{i,j\}}\ne 0 detA{ i},{ j}=0*detA{ i,j},{ i,j}=0
Comment. 由于麻烦,下面的一小段中漏掉了波浪线符号。
其中 det A S , T \det A^{S,T} detAS,T 表示 A A A 去掉 S S S 中的行、 T T T 中的列的余子式。
证明充分性:因为 rank A { i } , { j } = n − 1 \operatorname{rank}A^{\{i\},\{j\}}=n-1 rankA{ i},{ j}=n−1 因此 rank A { i , j } , { i , j } ⩾ n − 3 \operatorname{rank}A^{\{i,j\},\{i,j\}}\geqslant n-3 rankA{ i,j},{ i,j}⩾n−3,而斜对称矩阵的秩必然是偶数。
证明必要性:则列 rank A { i , j } , { j } = n − 2 \operatorname{rank}A^{\{i,j\},\{j\}}=n-2 rankA{ i,j},{ j}=n−2,故行 rank A { j } , { j } = n − 2 \operatorname{rank}A^{\{j\},\{j\}}=n-2 rankA{ j},{ j}=n−2,即 A ∅ , { j } A^{\varnothing,\{j\}} A∅,{ j} 中第 i i i 行可被其他行线性表出,然后 rank A { i } , { j } = rank A ∅ , { j } = n − 1 \operatorname{rank}A^{\{i\},\{j\}}=\operatorname{rank}A^{\varnothing,\{j\}}=n-1 rankA{ i},{ j}=rankA∅,{ j}=n−1,即证。
然后,显然 det A { i , j } , { i , j } ≠ 0 \det A^{\{i,j\},\{i,j\}}\ne 0 detA{ i,j},{ i,j}=0 则存在包含 * i , j * \langle i,j\rangle *i,j* 的完美匹配,接下来把 i , j i,j i,j 删除继续递归。这只需判断 det A { i } , { j } \det A^{\{i\},\{j\}} detA{ i},{ j},联想到伴随矩阵 A ∗ A^\ast A∗,由于斜对称性,不需额外转置。又联想到 A − 1 = A ∗ det A A^{-1}={A^\ast\over\det A} A−1=detAA∗,因此只需判断 ( A ~ − 1 ) i , j (\tilde A^{-1})_{i,j} (A~−1)i,j 是否非零即可。
需要动态维护矩阵的逆。利用这样的定理:若
A = ( a ˉ v ˉ u ˉ B ˉ ) , A − 1 = ( a v u B ) A=\begin{pmatrix} \bar a & \bar v\\ \bar u & \bar B \end{pmatrix}, \quad A^{-1}=\begin{pmatrix} a & v\\ u & B \end{pmatrix} A=(aˉuˉvˉBˉ),A−1=(auvB)
那么 B − 1 = B ˉ − u v a B^{-1}=\bar B-{uv\over a} B−1=Bˉ−auv 。其中 u u u 是 n × 1 n\times 1 n×1 矩阵, v v v 是 1 × n 1\times n 1×n 矩阵, a ≠ 0 a\ne 0 a=0 。
证明只需暴力展开,此处略。不难发现这就对应了删去(同标号)一行一列的维护。
而高斯消元的初等行变化可以很容易地同步作用到 A − 1 A^{-1} A−1 上,是可维护的。
显然每次维护是 O ( n 2 ) \mathcal O(n^2) O(n2) 的,共 n n n 次维护,总复杂度 O ( n 3 ) \mathcal O(n^3) O(n3) 无误。
如果带权呢?把 e i , j e_{i,j} ei,j 设为 y w i , j y^{w_{i,j}} ywi,j,转化为求算 det A ~ \det\tilde A detA~ 中 y y y 最高次数,用插值得到 关于 y y y 的结果。只在 ∑ w \sum w ∑w 较小时可用。
线性规划做法
根据 Jack Edmonds \text{Jack Edmonds} Jack Edmonds 的研究1,最大匹配可以用如下线性规划得到:
{ ∑ j x i , j ⩽ 1 for all i ∈ V ∑ i , j ∈ S x i , j ⩽ r for all r ⩽ ∣ V ∣ , ∣ S ∣ = 2 r + 1 x i , j ⩾ 0 for all i , j ∈ V \begin{cases} \sum_{j}x_{i,j}\leqslant 1 &\text{for all }i\in V\\ \sum_{i,j\in S}x_{i,j}\leqslant r &\text{for all }r\leqslant|V|,\;|S|=2r+1\\ x_{i,j}\geqslant 0 &\text{for all }i,j\in V \end{cases} ⎩⎨⎧∑jxi,j⩽1∑i,j∈Sxi,j⩽rxi,j⩾0for all i∈Vfor all r⩽∣V∣,∣S∣=2r+1for all i,j∈V
他证明了该 L P \rm LP LP 的解空间(多胞体)的所有顶点恰为所有匹配。
NEED HELP. 他是怎样证明的?我现在还没看懂。
Maximum Matching and a Polyhedron With 0,1-Vertices. doi: 10.6028/jres.069.(科学上网访问速度更快) ︎
边栏推荐
- 不可思议,全靠这份Android面试题,斩获多家互联网大厂offer
- NT 内核函数原型大全
- MySQL表sql语句增删查改_增加
- servlet——servlet介绍 | 发布动态资源
- 错误代码: 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current
- 数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
- 6.1 总线的概念和结构形态
- ID3v2 Library以便能够设置
- Gold Transfer(树上倍增)
- 使用.NET简单实现一个Redis的高性能克隆版(七-完结)
猜你喜欢
STM32入门开发 LWIP网络协议栈移植(网卡采用DM9000)
爬虫封装成api
[Building a 2D rasterized map using SLAM technology]
卷积神经网络梯度消失,神经网络中梯度的概念
困扰所有SAP顾问多年的问题终于解决了
数据库导出的csv文件纯数字被转为科学计数法
解决 Pocess finished with exit code 1 Class not found 和 Command line is too long. Shorten the command
人是怎么废掉的?人是怎么变强的?
B端产品需求分析与优先级判断
宝塔计划任务执行周期设置【秒】为定时单位【或者更小】
随机推荐
【Ackerman Motion Control】
[UE] 入坑
VMWare中安装的win10,新增其他盘符,如:E盘,F盘等
7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇
我用这个操作,代码可读性提升一个档次
database transaction
二维数组名的用途
不可思议,全靠这份Android面试题,斩获多家互联网大厂offer
如何开手续费低靠谱正规的期货账户呢?
VideoScribe stuck solution
6.1 总线的概念和结构形态
go基础之并发
I got the P8 "top" distributed architecture manual that went viral on Ali's intranet
阿里云ssl证书申请,宝塔ssl证书部署
数据库导出的csv文件纯数字被转为科学计数法
Huawei WLAN Technology: AC/AP Experiment
使用树莓派和OAK相机部署机器人视觉模型
SAP 产品增强技术回顾
NT 内核函数原型大全
【中央任务调度系统—通信开发】