0x00 摘要
“馬拉核彈”演算法由 SXHT 同學(2009~今)發明,並在 2024 年 11 月於某不知名學校機房內正式公佈。該演算法基於 1975 年發明的 Manacher 演算法,並將其推廣至對稱正方形問題。
原文連結與密碼:sunxuhetai2009。
關鍵詞:Manacher 演算法 資訊學 對稱正方形
0x01 緣由
先來看這道題目:
給定一個 \(n\) 行 \(m\) 列的矩陣,求矩陣中上下對稱且左右對稱的正方形子矩陣的個數。
這道題可以應用二維雜湊實現,時間複雜度 \(O(n^2 \text{log} n)\);但馬拉核彈演算法提供了另一種可能性。
0x02 解釋
嗯哼!單調性——顯然有若大正方形對稱,則被大正方形包含的小正方形對稱
二分是非常不錯的選擇呢!進一步,二分正方形邊長
然後就是快樂的列舉中心點環節
剩餘的操作類似於……,只不過換成了二維矩陣
同樣需要注意如下情況……
- 對於奇數階和偶數階的兩種情況,要分開處理哦!
- 上下翻轉和左右翻轉後的結果都需要比對成功才算迴文矩陣