线性基基础
Posted lfri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性基基础相关的知识,希望对你有一定的参考价值。
介绍
基是线性代数中的一个概念,而在现行OI中,通常利用基在异或空间的一些特殊性质来解决问题,而这类问题涉及的知识被称为【线性基】
异或运算下的基:
对于数 $a_0, a_1,..., a_n$ 将 $a_i$ 的二进制表示成 $(b_0,b_1,...b_n)_2$ 可看作一个向量,异或运算下的基就是 $(a_0, a_1, ... a_n)$ 中的极大线性无关组。
设 $V$ 是 $(a_1, a_2,...,a_n)$ 构成的空间,求 $V$ 的基。初始化 $\alpha = (a_0, a_1, ...a_n)$.
- 若 $a_1=0$,则从 $\alpha$ 中去掉 $a_1$;否则保持 $\alpha$ 不变
- 若 $a_2 \in V(a_1)$,则从 $\alpha$ 中去掉 $a_2$;否则保持 $\alpha$ 不变
- 若 $a_j\in V(a_1,a_2,...,a_j-1)$,则从 $\alpha$ 中去掉 $a_j$;否则保持 $\alpha$ 不变
如何判断一个向量是否已经属于线性空间,可以利用高斯消元,判断 $a_j$ 能否表示成 $a_1,a_2,...,a_j-1$ 的线性组合。
插入
令插入的数为 $x$,考虑 $x$ 的二进制最高位 $i$:
- 若线性基的第 $i$ 位为0,则直接在该为插入 $x$,推出;
- 若线性基的第 $i$ 位已经有了值 $a_i$,则 $x = x \bigoplus a_i$,重复以上操作直到 $x=0$
如果退出时 $x=0$,则此时线性基已经能表示原先的 $x$ 了;反之,则说明为了表示 $x$,往线性基中加入了新的元素。
很容易证明这样的复杂度为 $O(\log_2n)$(即二进制的位数),也可以通过这种方法判断能否通过原数列异或得到一个数 $x$.
判断
例题
题意:给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。($1 \leq n \leq 50, 0\leq a_i \leq 2^50$)
以上是关于线性基基础的主要内容,如果未能解决你的问题,请参考以下文章