線性基學習筆記 模板總結

2021-10-04 00:17:45 字數 1075 閱讀 6735

引入:

一組線性無關的向量可以作為一組基底,用這個基底可以表示空間中的全部向量,而且這個基地的個數是確定的,他們線性無關,加入空間中的其他向量之後,就變得線性相關了。

線性基:

考慮這樣的線性基性質(模擬我們前面關於基的介紹):

性質一

首先線性基是如何構造的呢?

我們設有乙個陣列d,表示序列a的線性基,下標從0開始算。對於序列裡面的每乙個數,我們嘗試將它插入到線性基裡面去,具體如何插入這裡給出偽**(x(2)表示x的二進位制為)

for i=63 to 0

if(x(2)的第i+1位為1)

else x=x^d[i];

}

有了構造方法,我們就可以知道性質一原理了。如果原序列中的數字不能由線性基異或表示,則與插入方式矛盾。例如異或之後不為0,則插入了d[i],那麼原本的x一定可以由d[i]和線性基中的數異或得到。

x ^ d[a]^....=d[i]

d[i]^d[a]^....=x

如果乙個數字不能插入的線性基,那麼插入最後是得到0,說明線性基中的一些數與它異或可以得到0,說明這些數異或就可以表示它了(x^y=0,說明x==y)

性質二

性質二反證

如果d[a]^d[b]^d[c]=0,那麼d[a]^d[b]=d[c],說明d[c]可以由d[a]和d[b]表示,在插入中就不會插入d[c]了。

性質三

性質三比較顯然,符合基的基本定義,即基中元素個數是確定的,加入其他元素就會線性相關,所以元素個數也是最少的。

acm中的應用

演算法模板

struct linear_basis

bool ins(ll x)

ll max(ll x)

ll min(ll x)

void rebuild()

}lb;

void work()//處理線性基

ll k_th(ll k)

}

模板 線性基模板

數學太差,直接線性基當資料結構用orz 表示數集 1,2 k 1 表示乙個異或集合 可以說是將原數集壓縮 性質 直接抄的orz,雖然也不是特別懂 0 2.線性基的異或集合中每個元素的異或方案唯一,其實這個跟性質1是等價的。3.線性基二進位制最高位互不相同。1,2n 1 1,2n 1 1,2n 1 5...

模板 線性基

難度較大,請勿棄療 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。n 50sample input33 21sample output 3看上去莫名其妙地想貪心。給些定義 s 為無符號整數集 即s n 記為 xor sum s x or s um s s1 s2 s s ...

模板 線性基

給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。線性基模板可解決 將n個整數看做集合a 線性基即為集合a的子集 線性基中每個元素的異或方案唯一,也就是說,線性基中不同的異或組合異或出的數都是不一樣的。線性基的二進位制最高位互不相同。這樣我們先構造出線性基 然後貪心的去搞最大...