線性基學習筆記

2022-09-19 06:36:10 字數 2293 閱讀 5310

定義:對於 \([0,2^m)\) 之間的數集 \(a\) ,可以由集合 $ d$ 中的數異或得來,且\(|d|\)最小化,則稱 \(d\) 是 \(a\) 的一組線性基

注意到線性基不唯一

異或的基本性質:

\[a \oplus a = 0 \\

0 \oplus a =a

\]

性質一:線性基的元素不能互相表出(線性無關)

證明:如果存在 \(d_i=d_\oplus d_ \cdots \oplus d_\)

則如果在錶出時有用到 \(d_i\) ,可將其替換為\(d_\oplus d_ \cdots \oplus d_\) ,與線性基最小性矛盾

性質二:線性基的元素無法表出 \(0\)

證明:\(d_\oplus d_ \cdots \oplus d_=0\)

等價於 \(d_ \oplus d_ \cdots \oplus d_=d_\)

與性質一矛盾

性質三:線性基錶出元素互不相同

證明:如果有兩個線性基的子集異或和 \(a = b\),那麼同上處理

\(a \oplus b = 0\)

而 \(a \oplus b\) 也一定為 \(d\) 的子集,與性質二矛盾

性質四:總是存在一組線性基,使每乙個 \(d_i\) 的最高位的位置互不相同

證明:首先由 \(|d|\) 的最小性知所有的線性基大小相等

對於兩個最高位在同一位的數 \(a\) ,\(b\) ,將 \(a\) 替換為 \(a \oplus b\) ,此時依然能夠表出所有數,但是最高位在同一位的數不存在了

由此可知總能構造出一種滿足條件的線性基

由性質四,可以得出一種動態構造滿足性質四特殊線性基的演算法:

設 \(p_i\) 表示二進位制最高位為 \(i\) 的線性基元素

由性質四知道 \(p_i\) 唯一,標出了乙個滿足性質四的線性基

考慮新增元素 \(x\) 到 \(d\) 中,逐位考慮 \(x\) 為一的位置

首先對於全域性最高位,如果 \(x\) 此位為一:

\(p_m=0\) 時,那麼此時線性基無論如何異或都無法得到 \(x\) ,直接 \(p_m=x\),完成演算法退出

否則 \(i\) 只能必須由 \(p_m\) 異或其他數表出,因為已經沒有其他元素最高位比 \(p_m\) 高,為了方便後續操作,將插入目標改為 \(x \oplus p_m\)

如果 \(x\) 此位為零,則此位沒有影響,不考慮

注意到此時已經考慮完了最高位後,後續不會再對最高位產生影響,相當於去掉最高位的子問題,將下一位看做最高位,繼續插入修改後的 \(x\)

實現:

void ins(ll x)

x^=d[i];

}}

單次插入時間複雜度 \(o(m)\) ,共計 \(o(nm)\)

另外一種求線性基的辦法是矩陣高斯消元

我們考慮每個 \(a_i\) ,將其二進位制分解寫成矩陣形式

\[\begin

0101\\

1100\\

0010\\

0111\\

1001

\end

\]可以知道,異或操作是模二意義下的加法,即模二意義下的初等行變換

高斯消元為上三角矩陣

\[\begin

1001\\

0101\\

0010\\

0000\\

0000

\end

\]去掉為零的行,由於異或操作可逆,可知這是原集合的線性基

此時每一行恰有乙個主元,滿足性質四

複雜度 \(o(nm^2)\) ,實現略

1.查詢某個數夠被 \(a\) 中的元素異或表出:

直接用第一種方式嘗試插入該數,如果最終沒有發生修改,那麼返回true

2.查詢所有能被 \(a\) 中元素異或錶出的數中第 \(k\) 大的數:

拍同樣考慮最高位,

首先處理一下原來的滿足性質四的線性基,要保證除了 \(p_i\) 外其他所有線性基元素的第 \(i\) 位為零,直接將不為零的位異或上已經處理過的 \(p_j(j即可

對於 \(p_m\),由於所有數異或上 \(p_m\) 一定比原本大,那麼將 \(k\) 與 \(2^\) 比較,就可以知道需不需要異或 \(p_m\)

繼續按位考慮子問題即可

3.查詢最大/最小異或和

仿照2進行貪心即可

線性基學習筆記

線性基是幹嘛的呢?給定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...