1. 程式人生 > >線性空間/線性基

線性空間/線性基

這樣的 失敗 說明 問題 發現 類比 異或和 出了 大致

線性基有啥用

我們有些時候會遇到類似這樣的問題:給定一組數字,求異或和最大值。

我們可以用線性基來解決這個問題。

怎麽構建線性基呢

那麽我們怎麽考慮這個問題呢?

我們可以類比於向量。

在向量中,我們可以用單位向量表示某一個方向上的單位量。並且我們能用n個單位向量導出一個$n$維的空間。

同理對於異或空間也是可以線性基來導出的。

我們可以把一個長整型看成$64$維的向量,每個方向為$0$或$1$。

我們考慮一個數能導出怎樣的一個單位向量呢?

我們發現如果是單位向量,那麽這個向量除了當前這個方向上為$1$,其余都是$0$。

但是在這裏我們可以放寬這個要求,我們要求高位上全為$0$,這一位為$1$。

如果前$k$維的單位向量都已經被成功導出,那麽我們就可以完全地掌控前$k$維的空間了。

大致就是這個意思。

我們考慮插入一個數的操作。

我們從高位(維)向低位(維)遍歷,如果我們發現當前第$i$位上為$1$,也就說明了這一個數對這個$i$維空間有影響。

我們判斷一下,當前這個空間是否已經被成功導出了,如果已經被導出的話,我們就有辦法消除這個影響,也就是異或上當前這個空間的單位向量。

如果沒有被成功導出,那麽我們最高就能影響到當前這個空間了,記錄這個向量為當前空間的單位向量,結束循環。

有沒有插入失敗的情況呢?

有,就是當前這個向量能被完全消除影響,也就是說能被之前的向量導出的時候。

實現

線性空間/線性基