我關於的線性基簡單理解

2021-09-25 12:22:31 字數 2185 閱讀 5624

線性基:線性基是一種特殊的基,它通常會在異或運算**現,它的意義是:通過原集合s的某乙個最小子集s1使得s1內元素相互異或得到的值域與原集合s相互異或得到的值域相同。

線性基有三個性質:

1、原序列裡面的任意乙個數都可以由線性基裡面的一些數異或得到。

2、線性基裡面的任意一些數異或起來都不能得到0

3、線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的

簡單說明一下性質一和二:

首先我們要知道乙個關於異或的小性質:

若a ⊕b

⊕c=0

a\oplus b \oplus c = 0

a⊕b⊕c=

0 則a⊕b

=c

a \oplus b = c

a⊕b=

c,若a⊕b

=c

a \oplus b=c

a⊕b=c則a⊕c

=b

a\oplus c=b

a⊕c=b。

性質一當不能成功插入線性基時:

肯定是它在嘗試插入時異或若干數後變成0

有x ⊕d

[a]⊕

d[b]

⊕d[c

]⊕..

.=

0x\oplus d[a] \oplus d[b] \oplus d[c] \oplus ... = 0

x⊕d[a]

⊕d[b

]⊕d[

c]⊕.

..=0

根據上面小性質則有d[a

]⊕d[

b]⊕d

[c]⊕

...=

xd[a]\oplus d[b] \oplus d[c] \oplus...=x

d[a]⊕d

[b]⊕

d[c]

⊕...

=x所以,若不能插入線性基,則線性基里必定有一些數異或和等於x。

當成功插入線性基時:

我們假設x插入到了線性基的第i個位置,顯然,它在插入前可能異或若干個數,那麼就有:

x ⊕d

[a]⊕

d[b]

⊕d[c

]⊕..

.=d[

i]

x \oplus d[a] \oplus d[b]\oplus d[c] \oplus...=d[i]

x⊕d[a]

⊕d[b

]⊕d[

c]⊕.

..=d

[i]轉換一下:

d [a

]⊕d[

b]⊕d

[c]⊕

...d

[i]=

xd[a] \oplus d[b] \oplus d[c] \oplus ...d[i]=x

d[a]⊕d

[b]⊕

d[c]

⊕...

d[i]

=x所以顯然x

xx也可以由線性基里若干個數異或得到。

性質二設d[a

]⊕d[

b]⊕d

[c]=

0d[a] \oplus d[b] \oplus d[c] = 0

d[a]⊕d

[b]⊕

d[c]

=0則d [c

]=d[

a]⊕d

[b

]d[c]=d[a] \oplus d[b]

d[c]=d

[a]⊕

d[b]

因為d [c

]d[c]

d[c]

可以由d[a

]d[a]

d[a]

和d [b

]d[b]

d[b]

得到,所以所以線性基中不存在有任何數異或起來可以得到0。

線性基的插入

bool insert(int x) 

x ^= a[i];}}

return x > 0;

}

取最大值
int query() 

return ret;

}

k小值
void rebuild() 

long long kthquery(long long k)

關於線性基的學習與理解

若干數的線性基是一組數a1 a2,a n 其中ax 的最高位的1在第x位。通過線性基中元素xor出的數的值域與原來的數xor出數的值域相同。對每乙個數p從高位到低位掃,掃到第x位為1時,若ax 不存在,則ax p並結束此數的掃瞄,否則令p pxor ax。用線性基求這組數xor出的最大值 從高往低掃...

線性基總結(其實就是我的模板)

學過線代裡面的 基向量 基向量說的就是一組可以表示整個空間的向量。比如在三維空間中乙個基向量就是 1,0,0 0,1,0 0,0,1 線性基的定義也類似,給你乙個陣列a 它的線性基就是一組可以表示陣列a中任意乙個數的乙個陣列p 這個表示的意思就和前面的基向量表示的意思類似,是通過p中幾個元素的異或得...

加密 我的簡單理解

login前,先通過rsa獲取公鑰 login時,對password密碼進行公鑰加密,加密後,直接提交伺服器,利用伺服器進行解密,解密用到私鑰 解密後返回資料,這裡有乙個資料tokens,在專案中,一般這個資料都是永久性有效的,當然有時候返回的資料是整體加密的,token被伺服器aes加密了,約定的...