2024.2.4 闲话

歌:NeruNeru-Chan travels to the Luminous Stars! - Halv .

分割线

如果你在某些代数系统中需要使用单位根 \(\omega\),然而单位根在对应系统中不存在,该如何处理?

一种 naive 的想法:扩域把 \(\omega\) 加进去,然而复杂度非常高 .

对于代数系统 \(\mathcal A\),考虑扩域 \(\mathcal I_n=\mathcal A[\omega_n]\),则断言:

\[\mathcal I_n\cong\mathcal A[x]/\langle\Phi_n(x)\rangle \]

其中 \(\Phi_n\) 是分圆多项式 .

这也就表明两个带着 \(\omega_n\) 的东西的运算相当于对应的多项式运算最后对分圆多项式 \(\Phi_n(x)\) 取模 .

结论可以由 \(\Phi_n(x)\)\(\omega_n\) 的最小多项式简单证明 .

对于取模的具体计算,由于 \(\Phi_n(x)\mid(x^n-1)\),在过程中可以先对 \(x^n-1\) 取模,最后再修正到 \(\Phi_n(x)\) .

下面的内容可能和上文关系不大 . 但是上面的做法一般不容易有什么应用 .

考察多项式乘法在不存在单位根,但是可以做除法的情况 .

首先分析 DFT 的时间复杂度:

Lemma 1

假设 \(n=s^r\)\(v=s^u\)\(u\ge r\),则对系数在 \(\mathcal I_v\) 中的多项式做长为 \(n\) 的 DFT 的时间复杂度不超过 \(O(snvr)\) .

证明平凡不表 .

Lemma 2

做两个度不超过 \(n\) 的多项式 \(A(x),B(x)\) 的乘法需要 \(O(n\log n)\) 次乘法和 \(O(n\log n\log\log n)\) 次加法 .

\(m=s^r\) 满足 \(\varphi(m)>\deg A+\deg B\) . 考虑不计算 \(A(x)B(x)\),而计算 \(A(\omega_m)B(\omega_m)\)(因为这里是要对素多项式 \(\Phi_m(x)\) 取模,由 \(\deg\Phi_m(x)=\varphi(m)>\deg A+\deg B\) 所以这个转化是可以成立的,最后只需要把单位根换成 \(x\) 即可).

换言之,我们现在对 \(\mathcal I_m[x]/\langle x-\omega_m\rangle\) 上的元素做乘法 .

\(p=s^u\)\(q=s^v\)\(u+v=r\)\(v+1\le u\le v+2\),考察:

\[\begin{aligned}A(x)&=\sum_{j=0}^{q-1}x^j\sum_{i=0}^{\varphi(p)-1}a_{iq+j}x^{iq}\\&=\sum_{j=0}^{q-1}x^j\sum_{i=0}^{\varphi(p)-1}a_{iq+j}\omega_m^{iq}\\&=\sum_{j=0}^{q-1}x^j\sum_{i=0}^{\varphi(p)-1}a_{iq+j}\omega_p^i\end{aligned} \]

把内层 \(\sum\) 看成系数然后对外层做 DFT 即可 .

因为这里相当于在 \(\mathcal I_p[x]\) 上做 DFT 所以可以用上一个 Lemma 分析复杂度 .

DFT 的复杂度不超过 \(O(spqr)=O(snr)\),所以取充分小的 \(s\) 即可做到 \(O(n\log n)\) 次加法 .

对于乘法可以递归调用上述过程 .

加法:\(T(n)=\sqrt n\cdot T(\sqrt n)+O(n\log n)=O(n\log n\log\log n)\) .

乘法:\(T(n)=\sqrt n\cdot T(n)+O(1)=O(n\log n)\) .

(根据一般 DFT 的经验,这里的复杂度应该是 \(\Theta\) 的)

Reference:如何在任意代数结构上做多项式乘法 - whx1003 .

posted @ 2024-02-04 09:57  Jijidawang  阅读(79)  评论(0编辑  收藏  举报
😅​