1. 程式人生 > >淺談線性基

淺談線性基

證明 就是 異或和 滿足 所有 arr 貪心算法 表示 子集

幾個概念或引理

概念1:數集的異或和:定義一個無符號整數集合S(註意,我們接下來討論的集合均指由無符號整數為元素構成的集合),則S的異或和就是S中所有元素互相異或的結果.

概念2:張成:子集Ti ⊆ S且子集Ti異或和組成的集合K就是數集S的張成,記做K=span(S)就可以理解為S中取任意多個元素異或運算獲得的值組成的集合就是S的張成K。

概念3:線性相關和線性無關:

線性相關: 設元素x∈S,數集去除元素x後的數集為S’,且滿足x∈span(S’)即 span(S)=span(S’),就可以理解為去除x元素後集合S對於異或運算獲得值組成的集合沒有變化,也可以這麽說——x可由S中的其它某些元素互相異或得來。這樣的元素x就稱x與S線性相關。

線性無關:不滿足線性相關的元素x,就稱x與S線性無關。

概念4:線性基:設集合B是集合S的線性基,當且僅當滿足如下條件

  1. B是span(S)的子集,就是說B必須是S張成中任意數組成的集合
  2. B中的任意元素x與S是線性無關的,也就是說,B中所有元素均可由S中的某些元素互相異或得來

引理1:基於概念4,通過推理可知線性基是對於xor運算表示S集合的最小表示方法,是缺一不可的,所以,一個集合的線性基是可以表示集合S xor 運算組成值得最小的集合。

引理2:異或運算的自反性:即a xor b=c ↔ a=b xor c; b=a xor c;

異或運算的交換律:即a xor b=c ↔b xor a=c;

異或運算的結合律:即a xor b xor c ↔ a xor (b xor c)

其他1:構造線性基時為了處理方便(減小時間復雜度),在線性基集合中滿足單調性(增)

貪心算法構造線性基

設線性基集合B是S集合的線性基;

每次插入元素x,從B集合高位到低位掃;(從大到小,使元素越異或越小)

設目前線性基到元素編號為i,B[i]有兩種情況==0或非0,分別考慮:

B[i]!=0:x^=B[i](證明一下:設原來的數為x,異或B[i]後的值為x’,有x’=x ^ B[i],由引理2可知x= x’ ^ B[i],也就是說元素x可以從x’和B[i]兩個元素構造而來,也可以稱作對元素x進行xor運算的一種拆分)

B[i]==0:先把B[i]=x;對高位進行遍歷B[j]^=B[i] {j>i}(目的是把高位B[j]消到最小),

同時B[i]^=B[j] {0≤j<i} (目的是把B[i]消到最小)

操作後顯然保證線性基B[i]是單調(增)。

淺談線性基