線性基求交


參考資料:牛客題解

即對於兩個線性空間\(V_1,V_2\),求它們的交\(V_1\cap V_2\)

首先,兩個線性空間的交顯然還是線性空間

引理:若 \(V_1,V_2\) 是線性空間,\(B_1,B_2\) 分別是他們的一組基,令 \(W=B_2 \cap V_1\) ,若 \(B_1 \cup (B2 \setminus W)\) 線性無關,則 \(W\)\(V_1 \cap V_2\) 的一組基。

證明:考慮任意\(v\in V_1\cap V_2\),那么\(v\)可以同時被\(B_1\)\(B_2\)表示出。考慮如何證明\(v\)可以被\(W\)線性表示。我們假設不能,那么\(v\)一定可以被\(S\)\(T\)共同線性表示,其中\(S\in W,T\in B_2\setminus W\),且其中\(T\)不為空。那么此時\(T\)一定與\(B_1\)線性相關,與我們的假設不符。所以上述假設成立

但是 \(B_1 \cup (B_2 \setminus W)\) 有可能線性相關,這時我們只需要換一組基即可。

假如當前加入的元素為 \(x\) ,若 \(x\) 不能被 \(B_1 \cup B'_2\) 表示,那么直接在 \(B_2'\) 中加入 \(x\) 即可;否則 \(x\) 一定能被 \(B_1 \cup (B_2' \setminus W)\) 的恰好一個子集表示,設 \(x=\text{xor(S) ^ xor(T)}\) ,其中 \(S \subseteq B_1,T \subseteq B_2' \setminus W\) ,在 \(B_2'\) 中加入 \(\text{xor(S)}\) 即可,且此時\(S\in W\),在\(W\)中也加入\(S\)即可

總復雜度\(O(d^2)\),其中\(d\)為維數

#define int unsigned int
Base merge(Base a,Base b){
	Base na(a),tmp(a),gl;
	int cur,d;
	fp(i,0,31)if(b[i]){
		cur=0,d=b[i];
		fd(j,i,0)if(d>>j&1){
			if(tmp[j]){
				d^=tmp[j],cur^=na[j];
				if(d)continue;
				gl[i]=cur;
			}else tmp[j]=d,na[j]=cur;
			break;
		}
	}
	return gl;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM