線性空間
線性基性質
線性基是特殊線性空間中的一組基底,具有以下特殊性質:
0:若\(d_i > 0\),則\(d_i\)二進位制下第\(i+1\)位為\(1\)且\(i+1\)位為最高位。
1:元素線性無關,即異或和非0
證明:前者為線性無關,後者為異或路徑上的元素及插入點構成成\(a_i\)
3:選取一些元素構成集合\(s\),其異或和\(x\)代替\(s\)中任意元素後新\(s\)和其他線性基中的元素張成的空間不變。
證明:考慮\(t\subset s,t\neq \empty,\bigoplus_^d_i=x\)時,對於\(\forall i,d_i\in t\)有\(\bigoplus_^d_j\bigoplus_^\oplus x=d_i\),易得其等價。
4:線性基中數的個數唯一,且最少。
證明:對於乙個不能插入的原序列數\(x,(t\subset s,x=\bigoplus_^d_i)\)和線性基\(s\),交換滿足\(\forall i,i\in t\)的\(d_i\)與\(x\),性質在任意時刻仍然成立。
構造假設已經擁有乙個線性基,想要插入乙個數\(x\)
從高位往低位考慮,如果\(x\)的第\(j\)位為\(1\)且\(d_i>0\)那麼\(x=x\oplus d_i\),即消掉與\(d_i\)相同的位且對其他\(i\)位取反。
異或保證了線性無關,明顯若中途為\(0\),則線性相關,停止插入。
如果\(d_i=0\)且\(x\)的\(i+1\)位為\(1\),則插入到\(d_i\)中
明顯對於\(j>i,d_j>0\)的\(d_j\)的第\(i+1\)位亦可能為\(1\),但一定有\(j+1\)位為\(1\),因此插入後滿足線性無關。
**
void insert(ll x) else x ^= d[i];
} else if (!x) return;
}}
應用
1:最大最小異或和。
sol:\(d_i\)的最高位為\(i+1\)位,直接貪心即可
2:\(k\)小異或和。
sol:考慮構造新線性基,保證對於\(\forall i, d_i>0\)時,僅\(d_i\)的\(i+1\)位為\(1\)。
正確性:對於\(\forall i, d_i>0\)的 \(d_i\),若第\(\forall j, j\in[i-1,0]\)位\(>0\)且\(d_=0\),那麼僅可能存在
\(\forall k,k\in[i-1,j+1]\)的\(d_k(d_k>0)\)使得\(d_k\)的第\(j\)為\(1\),能夠消去\(d_i\)的第\(j\)位,但此時若\(d_i\)的\(k+1\)位為\(0\)
明顯\(d_i\)將在異或後變大,即不符合變小的約定。
若\(d_i\)的\(k+1\)位為\(1\),則符合約定,因此構造滿足上述性質的線性基一定會使得獨立時能異或出\(k\)小。
\(k\)小異或和構造方法
對於每乙個\(d_i\)考慮其\(1\)至\(i\)位,若\(d_i\)的\(j\)位為\(1\),將其異或上\(d_\)即可構造出目標線性基。
正確性:考慮前\(i-1\)位已經構造出來了,構造第\(i\)位的時候也一定合法
這啟發我們對於一組數插入的順序影響基底,但是不影響其張成的空間,這也對應著性質4
void kth()
實數線性基
實數線性基,和普通線性基區別不大,注意判eps,和異或線性基相似的地方是每個向量有m維
實際上就是m位的異或線性基,異或改成加減就好。
const ld eps = 1e-8;
int vis[n], n, m;
ld px[n][n];
inline int ins(ld *res) else
}}
線性基學習筆記
線性基是幹嘛的呢?給定n個數,求所有數的異或和最大是多少?求解這類問題的時候,就需要線性基了 個人感覺線性基本身就一種貪心。首先定義ba se i bas e i 表示最高位1在i位的數是什麼 對於新進來的數tm p tmp 我們先找出他最高位上的1,假設為第 j j 位,然後看一下ba se j ...
線性基 學習筆記
includeusing namespace std using ll long long const int maxn 5e5 5 原來的數 const int maxbit 63 ll a maxn 原來的數 ll p maxbit p j 第j位為最高位1的數 最高位1在第j位的數 int m...
線性基 學習筆記
按位計算,如果相同記為0,不同記為1。如果,a b c,c b a 交換律結合律 對於任何數,x x 0,x 0 x 對 於一 段序列a n,異或 和為a1 a2 an 對於一段序列a n,異或和為a 1 a 2 a n 對於一段序列 an 異或和為 a1 a2 an 設t s,所有 這樣的子 集t...