有一個 的 矩陣一開始都是,一次操作會將第 列和第 行取反,先進行給定的 次操作打亂矩陣,再隨機操作直到復原,求模 意義下的期望操作次數。
整個矩陣可以用每一個行列被取反的次數來描述,用 和 表示這個行或列被取反了偶和奇數次,每次操作會將第 個列狀態和第 個行狀態取反,直到 個狀態全部為 或 。
設 為當列狀態有 個 ,行狀態有 個 時的期望操作次數,則
因為每次操作不會改變所有 的個數的奇偶性,所以只有 為偶數的狀態是有用的,對這些狀態高斯消元求解後回答打亂後的狀態 ,時間複雜度 。
注意到這是一個網格圖上的稀疏方程組,可以用Berlekamp-Massey算法或網格圖消元來優化到 。
現在變量和方程式都有 個,如果能縮小到 個,一般的高斯消元就可以有不錯的複雜度,將所有狀態 按 分類,每一組的第一個狀態當成變量,就是所有左上方的 ,然後由
就可以得到 關於已知項的線性表達,每一組的最後一項再與它附近的項構成一個方程式,對這些方程式做高斯消元,複雜度 。
接下來的作法就和高斯消元沒什麼關係了,將行列分開來討論,先討論列,在每次操作中每個列都有 的機率被選到,所以一個列在 次操作中被選中 次的機率的EGF(Exponential Generating Function)為
如果這個列需要被操作偶數次,其EGF為:
如果這個列需要被操作奇數次,其EGF為:
若打亂後列狀態有 個 ,行狀態有 個 ,表示有 個列需要被操作奇數次, 個列需要被操作偶數次,那麼 次操作後列狀態全部為 的機率的EGF記為
其中 是一個序列, 為展開後項的係數,同理有
表示行狀態全為 的EGF。
先討論比較簡單情況,當 為奇數時,不可能達成所有行列狀態同時為 ,想要歸零矩陣只能全部為 ,現在需要求出第 次操作使所有行列狀態全為 的OGF(Ordinary Generating Functions),記為 ,前面 都是EGF的形式,先把它們轉成OGF才能把對應操作次數的機率相乘,容易得到
然後由 的定義有
所以
但這還不是我們要的生成函數, 描述了第 次操作時歸零的機率,但不保證是第一次歸零,我們要的是恰好在第 次歸零的機率,如果一組操作在第 次第一次歸零,那麼剩下的 次操作必須使每個行列都被操作偶數次,令 為第 次操作時第一次歸零的機率的OGF, 為 次操作使所有行列被取反偶數次的機率的OGF,則 有
其中 和 類似,是 和 展開後的係數。
注意到 所以 就是我們要的期望次數
但是 在 處是不收斂的,因為當 或 時分母是 ,我們知道答案一定收斂,所以將 都乘上 ,然後計算 這四項得到
因為
所以
現在來討論怎麼求 ,在 的展開中選擇 項 ,的展開中選 項 會得到 項,發現只有與 同奇偶的項是有用的,其他都是 ,重新定義 為 的係數,那麼就有
這部分可以直接 計算,改寫並帶入上面四項
為正是因為 一定是偶數
這樣就可以 算出 。
別忘了這只是 為奇數時的狀況,若 為偶數,讓所有行列狀態變成 也可以歸零, 的定義變成操作 次使所有狀態都為 或都為 的機率, 為操作 次使所有行列狀態都取反偶數或都取反奇數次的機率,那麼有
其中 是 的係數,與 類似,代表從打亂後開始操作 次後所有列狀態都為 的機率, 與 類似,表示操作 次後所有列都被取反奇數次的EGF的係數, 同理,一樣有
同樣可以 計算。
還可以繼續優化,顯然 是 和 的捲積, 等係數都可以用 優化到 , 的部分可以看成 個 的有理函數
令 ,那麼答案就是 ,可以用 分治求出,如果已知 就可以得到 這部分的複雜度是 ,然後再用多項式多點求值求出 和 複雜度也是 ,所以總體複雜度就是 。