威馬汽車 CFO:已完成 D1 輪融資,獲得李嘉誠及何鴻燊家族資金投資
源自 link
定義
異或和
設 S 為一無符號整數集,定義異或和 \(\rm xor-sum(S)=S_1 \rm xor S_2 \rm xor \dots S_{|S|}\)
張成
設 \(T \subseteq S\),所有這樣的自己 \(T\) 的異或和組成的集合稱為 \(S\) 的張成,記作 \(span(S)\)。
線性相關
對於一個集合 \(S\),如果存在一個元素 \(S_j\),使得,\(S\) 在去除這個元素後得到的集合 \(S'\) 的張成 \(span(S')\) 中包含 \(S_j\),則稱 \(S\) 線性相關。
相對的,如果不存在這樣的元素 \(S_j\),則稱 \(S\)
線性基
我們稱 \(B\) 是集合 \(S\) 的線性基,當且僅當:
-
\(S\) \(\subseteq\) \(\rm span(S)\)
-
\(B\) 線性無關
線性基的個數稱為長度
線性基的基本性質:
- \(B\) 是極小的滿足線性基性質的集合,它的任何真子集都不可能是線性基
- \(S\) 中任意元素都可以唯一表示為 \(B\) 中若干元素異或起來的結果
構造
設集合 S 中最大的數在二進位制意義下有 L 位,使用一個 \([0..L]\) 的陣列 \(a\) 來儲存線性基。
這種構造保證了一個特殊性質,對於每個 \(i\),\(a_i\) 以下兩種可能:
- \(a_i=0\)
\(\circ\) 只有滿足 \(j>i\) 的 \(a_j\) 的第 \(i\) 個二進位制位可能為 \(1\) - \(a_i\neq 0\),並且
\(\circ\) 整個 \(a\) 陣列中只有 \(a_i\) 的第 \(i\) 個二進位制位為 \(1\)
\(\circ\) \(a_i\) 更高的二進位制位一定為 \(0\)
\(\circ\) \(a_i\) 更低的二進位制位可能位 \(1\)
我們稱第 i 位存在於線性基中,當且僅當 \(a_i\neq 0\)
證明
顯然特殊性質成立。
首先將 \(S\) 中的數插入到集合 \(B\) 中。對於一個 t 若它被消成 \(0\)
單次插入 \(O(\log t)\),空間同樣為 \(O(\log t)\)
合併
兩個線性基在 \(O(\log^2 t)\) 時間內合併,意義是用一個合併後的線性基表示 \(S_1\) 和 \(S_2\)
暴力插入就完事了
題目
毛毛蟲(沒許可權也看不了
看到集合中取數做異或立刻想到線性基,顯然有一個 \(O(n^2\log V)\) 的做法……
轉化一下看看能不能樹上啟發式合併,似乎不太行,但是考慮到自身到根的一條道路不存在,可以聯想到出棧序,隨即想到拍到序列上維護。
然後就得到一個 \(O(n\log^2V)\) 的做法,拍到序列上,然後暴力合併兩個線性基。
考慮這個線性基具有飽和性,即插入 \(O(\log V)\) 就不能繼續相里插入元素。
所以可以只合並這 \(O(\log V)\) 個線性基。
複雜度做到 \(O(n\log V\ +\ \log^4V)\)
說一點自己自己對這個東西的理解
考慮這是一個 \(\log V\) 的向量,線性基中的元素相當於基向量,使用基向量來線性組合出某個向量 \(x\)。特殊地,係數只能為 \(0\) 或 \(1\)。