2024.2.4 闲话

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

分割线

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

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

对于代数系统 A,考虑扩域 In=A[ωn],则断言:

InA[x]/Φn(x)

其中 Φn 是分圆多项式 .

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

结论可以由 Φn(x)ωn 的最小多项式简单证明 .

对于取模的具体计算,由于 Φn(x)(xn1),在过程中可以先对 xn1 取模,最后再修正到 Φn(x) .

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

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

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

Lemma 1

假设 n=srv=suur,则对系数在 Iv 中的多项式做长为 n 的 DFT 的时间复杂度不超过 O(snvr) .

证明平凡不表 .

Lemma 2

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

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

换言之,我们现在对 Im[x]/xωm 上的元素做乘法 .

p=suq=svu+v=rv+1uv+2,考察:

A(x)=j=0q1xji=0φ(p)1aiq+jxiq=j=0q1xji=0φ(p)1aiq+jωmiq=j=0q1xji=0φ(p)1aiq+jωpi

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

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

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

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

加法:T(n)=nT(n)+O(nlogn)=O(nlognloglogn) .

乘法:T(n)=nT(n)+O(1)=O(nlogn) .

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

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

Upd. 应用:k-FWT(不进位加法) - [CmdOI2019] 算力训练 .

posted @   yspm  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示