拟阵
拟阵
大量基础定义警告,参考了 wiki 和2018论文《浅谈拟阵的一些拓展及其应用》,如果想看大段详细证明请移步论文。
拟阵的概念比较抽象,有多种定义方法,结合这些定义方法可以更具体地了解拟阵的基础性质。
前言
很多问题可以转化为拟阵,但是并不是所有问题都可以通过简单的拟阵操作得到答案。
在具体问题中,很多时候有着更优的算法解决拟阵运算无法解决的操作。
但是对于一个奇怪的问题,如果转化为类似拟阵的操作后,就有很多性质可以拿过来套。在 OI 中,应用于拟阵的常见算法与二分图上的一些算法相当相似。
拟阵的应用,更多还是用 诸多的性质
把复杂,抽象问题向更简单的方向转化(便于乱搞)。
也可以便于简化问题的证明,所以这个东西了解一下也差不多了。
(不会有人丧心病狂到专门出一个拟阵交的题吧)。
符号及约定
\(|S|\) 集合大小。
\(S-T\),删除 \(S\) 中在 \(T\) 中的元素。
\(a\Rightarrow b\) 若 \(a\) 则 \(b\)。
\(a\Leftrightarrow b\),\(a,b\) 等价。
\(a\in b\) 元素 \(a\) 是集合 \(b\) 中的一个元素。
\(a\sube b\),集合 \(a\) 是集合 \(b\) 的子集。
\(\exists\) 存在。
\(\forall\) 任意。
幂集
一个集合 \(S\) 的所有 \(2^{|S|}\) 个子集构成的集合是 \(S\) 的幂即 \(P(S)\) 或记作 \(2^S\)。
集族
给定集合 \(S\) 的一些子集构成的类 \(F\) 叫做 \(S\) 的子集族(或称S 上的集合族), \(F \sube 2^S\)。
用独立集定义拟阵(似乎是最直观的定义)
一个二元组 \(M=(E,I)\),其中 \(E\) 是基础集,\(I\) 是 \(E\) 的一些子集构成的集族(即 \(I\sube 2^S\) ),称之为独立集,在独立集中的子集称之为独立的。
拟阵可以用独立集 \(I\) 定义,则 \(I\) 需满足性质:
- 空集:有 \(\emptyset \in I\),所以有 \(I\ne \emptyset\)。
- 遗传性:若 \(A\sube B,B\in I\),则 $ AI$。
- 扩充性:若 \(\exists A,B\in I,|A|>|B|\),则 \(\exists i\in A,(B\cup \{i\}) \in I\)。
例子:对于 \(S=\{1,2,3\}\),\(\{\emptyset \},\{\emptyset,\{1\}\}\) 是合法的独立集,但 \(\{\emptyset,\{1\},\{2\},\{3\},\{2,3\}\}\) 不是,因为它不满足扩充性。
\(\{\{1,2\},\{2,3\},\{1\},\{2\},\{3\},\{\emptyset \}\}\) 也是合法的独立集。
对于 \(S=\{1,2,3,4,5\}\),\(I=\{\{1,2,3\},\{3,4,5\},\{1,2\},\{2,3\},\{1,3\},\{3,4\},\{3,5\},\{4,5\},\{1\},\{2\},\{3\},\{5\},\{\emptyset\}\}\) 不是合法的独立集,因为它不满足扩充性(\(A=\{1,2,3\},B=\{3,4\}\)时)。
\[ \ \]
用基底和基定义拟阵(似乎是最简洁的描述)
基底: \(E\) 的一个 独立的极大子集 称为其的一个基底,独立的极大子集即其加入任意元素得到的子集不独立。
基: \(E\) 的基 \(B\) 为其所有基底构成的集合。
拟阵可以用基 \(B\) 定义,则 \(B\) 需满足性质:
- 非空:\(B\ne \emptyset\),最小的 \(B=\{\emptyset\}\)。
- 交换公理:对于两个基底 \(a,b\),若用 \(b\) 中 \(a\) 没有的元素换掉一个 \(a\) 中原先的元素,得到的集合依然是基底。
推论:基底等大,即 \(\forall a\in B,b\in B,|a|=|b|\) (否则就不满足扩充性)。
例如:若 \(\{1,2\},\{1,3\}\) 是基底,则 \(\{2,3\}\) 也是基底(否则不满足扩充性)。
可以得到拟阵的等价定义,且 \(I=\bigcup _{T\in B} 2^T\)。
用环路集定义拟阵
环路: \(S\) 的一个子集是环路,则这个子集是一个极小的非独立集,即去掉任意一个元素都会称为独立集。
所有环路构成的集合称为环路集 \(C\),如对于 \(E=\{1,2\},I=\{\emptyset,\{1\}\}\),环路集为 \(\{\{2\}\}\)。
拟阵可以用环路集 \(C\) 定义,则 \(C\) 需满足性质:
- \(C\)可以为空(此时\(I=P(S)\)),且\(\emptyset \not \in C\)。
- 环路互相之间不是真子集,即\(\exists a\in C,b\in C,a\sube b\Rightarrow a=b\) (否则不满足遗传性)。
- 若\(\exists a\in C,b\in C,a\ne b\)以及一个元素\(i\in a\cap b\),则\(a\cup b-\{i\}\)不是独立集。
推论:\(A\sube I \Leftrightarrow \nexists B\in C,B\sube A\)。
环路不一定等大。
环路和基底的一些关系
环路和基底之间不能通过加减一个元素转化。
基底加上一个元素得到的非独立集恰好包含一个环路。
拟阵的秩
拟阵的秩:拟阵的任意一个基底的元素个数是其秩 \(r\)。
为了同下文的秩函数相对应,也可说 \(\begin{aligned}r=\max_{R\in I}\{|R|\}\end{aligned}\),即最大的独立集大小。
用秩函数定义拟阵
对于元素集 \(S\),
若可以定义一个在 \(2^S\) 上的秩函数 \(r(T)\),满足以下性质:
大小有界: \(r(T)\in[0,|T|]\)。
大小传递性:\(A\sube B\Rightarrow r(A)\le r(B)\)。
次模性: \(r(A\cup B)+r(A\cap B)\le r(A)+r(B)\)。
那么可以用这样的一个秩函数定义一个拟阵 \(M=(S,r)\),此时 \(r(T)\) 为 \(2^T\) 中极大的独立集大小,且拟阵的独立集就是 \(I=\{T|T\sube S,r(T)=|T|\}\)。
例子
均匀拟阵:\(U_n^k=(S,I),|S|=n,I=\{T|T\sube S,|T|\leq k\}\)。
图拟阵:
对于无向图 \(G=(V,E)\),它的生成拟阵是 \(M=(E,\{T|T\sube E,T无环\})\)。
它的最大独立子集大小为 \(G\) 的最大生成森林边数,每个最大生成森林都是基底。
匹配拟阵:
对于无向图 \(G=(V,E)\),它的匹配拟阵是 \(M=(V,\{T|T\sube V,存在一个边匹配覆盖T\})\)。
它的最大的独立子集大小为 \(k\) 最大匹配数,每个最优匹配的方案都是基底。
异或线性基:
对于非负整数可重集合 \(S\),拟阵是 \(M=(S,\{T|T\sube S,T中的元素任意异或不会得到0\})\)。
(这是向量空间的线性基问题的一种)
注意分清楚 定义需要满足的条件 和 通过条件推导得到的性质 的区别 ,上面几种拟阵定义是等价的
一些应用
求最大权值独立子集
对于拟阵 \(M=(S,I)\),给每个 \(S\) 中每个元素一个非负权值,定义一个集合的权值为所有元素权值和,要求最大权值的独立子集。
这是一个非常简单的问题,直接从大到小能加入就加入即可,设最终选出的集合为 \(P\)。
证明:
\(P\in B\),否则可以再加入元素
假设存在更优解 \(Q\in B\),根据基底交换公理,一定可以用 \(P\) 中一个权值更大的元素换掉 \(Q\) 中一个元素,所以 \(Q\) 不是合法集合。
在连通图拟阵上使用该算法,就是 \(\text{Kruskal}\) 最小生成数算法。
在异或线性基上使用该算法,可以求得最大权值线性基。
拟阵交
对于同基础集的拟阵 \(M_1=(S,I_1),M_2=(S,I_2)\),它们的交是独立集的交。
但是它们的交不一定是拟阵。
求解最大交:最小最大定理:
\(\begin{aligned} \max_{A\in (I_1\cup I_2)}\{|T|\}=\min_{R\in S}\{r_1(R)+r_2(S-R)\}\end{aligned}\)
这个东西的证明分为两步:
- 证明\(\max\leq \min\)。
\(|T|=|T\cap R|+|T\cap (S-R)|\leq r_1(R)+r_2(S-R)\)
- 介绍找到两个最值的算法:
这个算法的中心是,从空集开始扩展 \(T\),并且相应找到对应的 \(R\) 使得 \(|T|=r_1(R)+r_2(S-R)\),此时答案已经充分了。
求解拟阵交的算法基于一个构造的图:
对于当前的答案 \(T\),构造一个有向二分图,两侧点集分别为 \(T,S-T\)。
对于分别在两侧的点 \(x,y\),
存在 \(x\rightarrow y\) 的边: 当 \(T\) 中把 \(x\) 换成 \(y\) 之后是 \(M_1\) 的独立子集。
存在 \(y\rightarrow x\) 的边: 当 \(T\) 中把 \(y\) 换成 \(x\) 之后是 \(M_2\) 的独立子集。
设对于 \(I_1,I_2\) 可行的增广元素集合为 $X_1,X_2 $ (即加入元素后依然独立的集合)。
每次的增广过程可以描述为:
- 如果 \(X_1\cap X_2\ne \emptyset\),直接都加入 \(T\) 。
- 构图,找到一条从 \(X_1\) 的点出发,到达 \(X_2\) 的最短的路径 \(P\) (广搜即可),将 \(I\) 变为 \(I\bigoplus P\) (这里原文是对称差,但是异或大家都懂哈)。
当不存在增广时,找到了最大的 \(T\),此时对应合法的 \(R\) 为 \(\{e\in S|在图中存在e到达X_2的路径\}\)。
由于每次增广至少增加一个元素,该算法的复杂度上限为 \(O(r|S|^2)\),其中\(r\) 为拟阵的秩,\(|S|^2\) 为边数。
带权拟阵交
每个元素带权:
在增广时,图上每个点加上点权(加入为正,删除为负),每次求出点权最短路进行增广即可。
拟阵交的应用
二分图匹配问题
二分图匹配匈牙利算法 是 求解拟阵交的问题 的一种特殊情况。
对于二分图 \(G=(V_1,V_2,E)\),构造:
\(M_1=(E,I=\{T\sube E|T中的边在V_1上没有公共点\})\),
\(M_2=(E,I=\{T\sube E|T中的边在V_2上没有公共点\})\)。
答案就是 \(M_1,M_2\) 交的最大值,匈牙利算法增广的过程是依次考虑 \(X_1\) 中的元素进行增广。
(带权的二分图匹配问题,实际也是可以用拟阵解决的,但是好像 \(\text{KM}\) 还是最棒的)。
拟阵交还可以解决一些看起来很抽象的 带有两个限制的 (可能带权) 的问题,比如论文里下面的这个例子
(Colorful Tree): 对于一个无向图,每条边给定一个颜色和一个权值,求颜色不能重复的最大生成树
类似这样的问题可以转化为拟阵交问题,但是这个东西的局限性实在太大,也没有人敢动
update:
有生之年竟然用上了这个东西?
**模拟赛有人搞了一个题:
对于一个无向图 \(G=(V,E),E=(u,v,w)\),其中\(w\)为每条边的颜色。
要求选出一个最大的边集,满足:
1.每种颜色\(i\)选出的边不超过\(c_i\)条,
2.选出的边不构成简单环。
然后写了一次不太正规的拟阵交模板。
令 \(M1\) 为个数的拟阵,\(M2\) 为生成树拟阵。
解释在代码里。
1 |
|