1. 程式人生 > 資訊 >威馬汽車 CFO:已完成 D1 輪融資,獲得李嘉誠及何鴻燊家族資金投資

威馬汽車 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\) 的線性基,當且僅當:

  1. \(S\) \(\subseteq\) \(\rm span(S)\)

  2. \(B\) 線性無關

線性基的個數稱為長度

線性基的基本性質:

  1. \(B\) 是極小的滿足線性基性質的集合,它的任何真子集都不可能是線性基
  2. \(S\) 中任意元素都可以唯一表示為 \(B\) 中若干元素異或起來的結果

構造

設集合 S 中最大的數在二進位制意義下有 L 位,使用一個 \([0..L]\) 的陣列 \(a\) 來儲存線性基。

這種構造保證了一個特殊性質,對於每個 \(i\)\(a_i\) 以下兩種可能:

  1. \(a_i=0\)
    ,並且
    \(\circ\) 只有滿足 \(j>i\)\(a_j\) 的第 \(i\) 個二進位制位可能為 \(1\)
  2. \(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\)

則說明可以被線性基表示,若插入到 \(B\) 中,考慮在之前已經做了若干次異或變換,而這些變換都是可逆的,所以用 \(a\) 中元素可以表示插入的元素。

單次插入 \(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\)