引入:
一組線性無關的向量可以作為一組基底,用這個基底可以表示空間中的全部向量,而且這個基地的個數是確定的,他們線性無關,加入空間中的其他向量之後,就變得線性相關了。
線性基:
考慮這樣的線性基性質(模擬我們前面關於基的介紹):
性質一
首先線性基是如何構造的呢?
我們設有乙個陣列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的子集 線性基中每個元素的異或方案唯一,也就是說,線性基中不同的異或組合異或出的數都是不一樣的。線性基的二進位制最高位互不相同。這樣我們先構造出線性基 然後貪心的去搞最大...