关于拟阵
预备知识
向量空间:
定义 \((F, V, +, •)\) 为向量空间(也称线性空间),其中 \(F\) 为域,\(V\) 为集合,\(V\) 中元素称为向量,\(+\) 为向量加法,\(•\) 为数乘运算,且运算满足 \(8\) 条公理。
线性无关:
向量空间中,对于 \(V\) 上一组 \(n\) 个向量 \(x_i\) ,若存在不全为 \(0\) 的数 \(k_i ∈ F\) ,使得 \(\sum^n_{i=1} k_ix_i = 0\),则称这 \(n\) 个向量线性相关,否则称为线性无关。
线性表出:
向量空间中,对于 \(V\) 上一组 \(n\) 个向量 \(x_i\) 及一个向量 \(y\) ,若存在不全为 \(0\) 的数 \(k_i ∈ F\) ,使得 \(\sum^n_{i=1} k_ix_i = y\),则称 \(y\) 可被 \(x_i\) 线性表出。
一组向量线性相关 \(⇐⇒\) 存在向量可被其他向量线性表出。
基:
在向量空间中,一个极大线性无关组称为一组基。基的大小就是向量空间的维数。
拟阵定义
独立集:
一个有限拟阵是一个满足下列条件的二元组 \(M = (E, I)\) ,其中 \(E\) 是有限集,称为基础集,\(I\) 是由 \(E\) 的一些子集(称为独立集)组成的有限非空集。
-
\(\emptyset \in I\)
-
遗传性:\(\forall A^{\prime} \subset A \subset E\),如果 \(A \in I\) 那么 \(A^{\prime} \in I\)
-
增广性或独立集交换性:如果 \(A, B \in I,|A|>|B|\),那么 \(\exists x \in A \backslash B\),\(s.t. B \cup\{x\} \in I\)
拟阵举例:
基与回路:
-
极大的独立集称为拟阵的基。
-
极小的不独立集称为拟阵中的回路。
-
用 \(\mathcal{B}\) 表示基的集合, 则 \(\mathcal{B}\) 非空, 且满足基交换性,即如果 \(A, B \in \mathcal{B}, A \neq B, a \in A \backslash B\) ,则 \(\exists b \in B \backslash A\) \(s.t. A \backslash\{a\} \cup\{b\} \in \mathcal{B}\) 。
秩函数:
由交换性可证明所有基的大小相同。
就像矩阵的秩,拟阵的秩就是基的大小。
拟阵类型
组合拟阵:
如上面的例子 \(E = \{1, 2, 3\}, I = \{size ≤ 2 的子集\} = \{∅, \{1\}, \{2\}, \{3\}, \{1, 2\}, \{1, 3\}, \{2, 3\}\}\)
像这样集合 \(E\) 中有 \(n\) 个元素,\(I = \{size ≤ r 的子集\}\) 的拟阵,称为组合拟阵,记为 \(U_{r,n}\) 。
上例即是 \(U_{2,3}\)。
分割拟阵:
如果把若干个组合拟阵拼在一起,就得到了分割拟阵。
向量拟阵:
设 \(E\) 为一个向量空间中的有限子集,\(I = \{E\ 中线性无关集\}\)。那么称 \(M = (E, I)\) 为向量拟阵。
\(|A| > |B| ⇒ dim A > dim B\),则 \(A\) 中必有 \(B\) 中向量组无法线性表出的向量 \(x ∈ A \ B\) ,将其加入 \(B\) 中,\(B ∪ {x}\) 仍线性无关。
如果拟阵可以用这种方式定义,那我们说 \(E\) 代表了拟阵 \(M\) 。
列拟阵:
用矩阵 \(A\) 的列来表示上述向量空间 \(E\) 中的向量,那么 \(A\) 称为列拟阵,我们可以说 \(A\) 代表了拟阵 \(M\) 。
环拟阵:
有限图 \(G(V, E)\) 中,将 \(E\) 边集作为基础集,所有森林为独立集,则 \(M(G)\) 为拟阵,称为环拟阵。
环拟阵的基为树,回路为环,这也是回路的称呼来源。
图拟阵:
像环拟阵那样从图中获得的拟阵称为图拟阵。
将每条边视为一个向量,只有边两端的点对应的值是 \(1\),其余为 \(0\)(自环均视为 \(0\) 向量)。
则图拟阵可视为一种特殊的向量拟阵。
匹配拟阵:
二分图 \(G = (U, V, E)\) 中,定义 \(U\) 的子集 \(I\) 是独立集当且仅当 \(I\) 能与 \(V\) 完美匹配,则 \(M = (U, I)\) 称为匹配拟阵。
基础操作
对偶:
\(M = (E, I)\),\(\mathcal{B}\) 为基的集合,定义 \(B^∗ = \{E − B|B ∈ \mathcal{B}\}\) 为 \(M\) 的对偶拟阵 \(M^∗\) 的基的集合。
即 \(M^∗ = (E, I^∗) = \{E − I | r_M(I) = r_M(E)\}\) 秩函数为 \(r^∗(S) = |S| − r(M) + r(E \backslash S)\).
\((M^∗)^∗ = M,(U_{r,n})^∗\) 同构于 \(U_{n−r,n}\) 。
其他操作:
除了对偶之外,还有两个拟阵操作,\(\text{deletion}\) 和 \(\text{contraction}\),反映在图拟阵上,\(\text{deletion}\) 是删边,而 \(\text{contraction}\) 是缩边。
并:
求若干个拟阵的并可以得到更大的拟阵。
\(M_{i}=\left(S_{i}, \mathcal{I}_{i}\right)\) 为拟阵, 拟阵并为:
\(M\) 仍为拟阵, 且 \(M\) 的秩函数为:
贪心算法
带权拟阵:
带权拟阵是给拟阵中的元素赋予一个非负实数作为权值。子集的权值定义为集合内元素权值之和。
贪心算法:
运用贪心算法,可以在带权拟阵中找出权值最大的基。
贪心算法就是先对元素按权值从大到小排序然后依次考虑每个元素,若加入当前集合后仍线性无关,则加入,否则不加入。最后得到的就是权值最大的基。
贪心算法证明:
证明每一步得到的都是某个最优解的子集。初始为空集,满足条件。
设 \(A\) 为当前得到的最优解的子集,若 \(A\) 无法扩展,则 \(A\) 为最优解。
否则由贪心算法,\(x\) 为能使 \(A\) 扩展权值最大的元素,则 \(A ∪ \{x\}\) 仍为最优解的子集。
反证,设 \(T\) 为包含 \(A\) 的最优解,构造 \(T′ = A′\) ,不断利用交换性以及 \(|T| > |T′|\) 增广 \(T′\) ,直到 \(|T| = |T′|\)。
此时 \(T′ = T − {y} + {x}\) ,\(y\) 在 \(T\) 时并没有被加入 \(T′\) 中,故 \(w(y) ≤ w(x)\) ,从而 \(w(T′) = w(T) − w(y) + w(x) ≥ w(T)\) 。
【例 1】最小生成树
最小生成树就是在带权的环拟阵上找权值最小的基。
取负, 加常数!
如何判断仍为独立集? 是否成环, 并查集维护。
这就是著名的 \(\text{Kruskal}\) 算法。
【例 2】任务调度问题
那些 \(\text{miss deadline}\) 的任务最后做也无所谓, 关键是其他的能否都在 \(\text{deadline}\) 前完成。
可以发现拟阵结构 \(M=(E, \mathcal{I})\) ,其中 \(I\) 是独立集当且仅当存在一种时间分配使 \(I\) 中任务都能在 \(\text{deadline}\) 前完成。
【例 3】Nikifor (ural 1041)
- 求带权向量拟阵中的权值最小的基。
如何判断向量组线性无关?
列线性方程组, 高斯消元求矩阵的秩。
【例 4】新 Nim 游戏 (cqoi2013)
首先利用 \(\text{Nim}\) 游戏结论, 不能留下异或和为 \(0\) 的组合。
一位的异或操作可以看作是 \(GF(2)\) 下的加法操作,般异或可以看作在 \(GF\left(2^{k}\right)\) 下的加法, 其中 \(k\) 为位数。
异或的线性无关就等同于在那个有限域中加法的线性无关。
因此就是在带权向量拟阵中求一组权值最大的基。
拟阵交
\(M_{1}=\left(S, \mathcal{I}_{1}\right), M_{2}=\left(S, \mathcal{I}_{2}\right)\) 是两个在基础集 \(S\) 上的拟阵。
那么 \(\mathcal{I}_{1} \cap \mathcal{I}_{2}\) 中的元素在两个拟阵内均为独立集。如何在 \(\mathcal{I}_{1} \cap \mathcal{I}_{2}\) 内找出最大的独立集?如何找出权值最大的独立集?
【例 5】二分图匹配
其中 \(\delta(v)\) 表示一端为 \(v\) 的边的集合,这两个拟阵都是分割拟阵。
这两个拟阵条件分别保证了二分图两侧每个点都最多只在一条边上, 其交集保证了选出的是匹配。
拟阵交算法描述
二分图匹配? 匈牙利算法,增广路。
就像匈牙利算法,我们需要一个过程,输入 \(I \in \mathcal{I}_{1} \cap \mathcal{I}_{2}\) ,输出 \(J \in \mathcal{I}_{1} \cap \mathcal{I}_{2}\) 使得 \(|J|=|I|+1\) 。
或找到一个 \(U\) 说明 \(|I|=r_{1}(U)+r_{2}(S \backslash U)\),\(I\) 已经是最大的了。