标签:ble href 退出 复杂 去掉 整数 证明 初始化 线性代数
基是线性代数中的一个概念,而在现行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_j$ 能否表示成 $a_1,a_2,...,a_{j-1}$ 的线性组合。
令插入的数为 $x$,考虑 $x$ 的二进制最高位 $i$:
如果退出时 $x=0$,则此时线性基已经能表示原先的 $x$ 了;反之,则说明为了表示 $x$,往线性基中加入了新的元素。
很容易证明这样的复杂度为 $O(\log_2n)$(即二进制的位数),也可以通过这种方法判断能否通过原数列异或得到一个数 $x$.
判断
题意:给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。($1 \leq n \leq 50, 0\leq a_i \leq 2^{50}$)
标签:ble href 退出 复杂 去掉 整数 证明 初始化 线性代数
原文地址:https://www.cnblogs.com/lfri/p/11261660.html