多项式算法3:FWT\FMT(快速沃尔什变换\快速莫比乌斯变换)

本文介绍了如何利用快速沃尔什变换(FWT)和快速莫比乌斯变换(FMT)来高效地处理多项式卷积中的OR, AND和XOR运算,通过FMT的巧妙设计,展示了在多项式乘法中的应用,并提供了相应的算法实现和时间复杂度分析。

多项式算法3:FWT\FMT(快速沃尔什变换\快速莫比乌斯变换)

前言

对于一个序列,将其中的元素一一映射到一个多项式函数的系数上,这个多项式函数便叫做该序列的生成函数
对于序列 f 0 , f 1 , ⋯   , f n f_0,f_1,\cdots,f_n f0,f1,,fn f ( x ) = ∑ i = 0 n f i x i f(x)= \sum_{i=0}^n f_ix^i f(x)=i=0nfixi为其生成函数,我们一般叫他们多项式。
卷积是通过两个函数 f f f g g g生成第三个函数的一种数学运算,其本质是一种特殊的积分变换。
当多项式卷积为 C k = ∑ i + j = k A i × B j C_k=\sum_{i+j=k} A_i \times B_j Ck=i+j=kAi×Bj
我们可以用FFT,NTT来做。
而当多项式卷积为(这里 ⊕ \oplus 指代异或): C k = ∑ i ∣ j = k A i × B j C_k=\sum_{i|j=k} A_i \times B_j Ck=ij=kAi×Bj C k = ∑ i & j = k A i × B j C_k=\sum_{i\&j=k} A_i \times B_j Ck=i&j=kAi×Bj C k = ∑ i ⊕ j = k A i × B j C_k=\sum_{i \oplus j=k} A_i \times B_j Ck=ij=kAi×Bj我们的FFT,NTT就不能派上用场了,这就要用到下面讲的FWT\FMT。而一般来讲,FMT(快速莫比乌斯变换)处理OR,AND问题,而FWT(快速沃尔什变换)是处理XOR问题的。

正文

OR运算的FMT

我们不妨先回忆一下FFT的思路:
先对于一个多项式求出它在带入若干单位根后的点值表示法,然后把点值表示法下的多项式乘起来,然后再把点值表示法变成多项式表示法。
FMT的思路与此类似。
不过,由于这三类与位运算关联的多项式卷积有其特殊的性质,我们不再代入若干指定的值,而是先进行一些变换。
我们不妨进行如下定义:
要求 c k = ∑ i ∣ j = k a i × b j c_k=\sum_{i|j=k} a_i \times b_j ck=ij=kai×bj F M T ( f n ) = ∑ i ∣ n = n f i FMT(f_n)= \sum_{i | n=n} f_i FMT(fn)=in=nfi不难发现
F M T ( a t ) × F M T ( b t ) = ( ∑ i ∣ t = t a i ) × ( ∑ j ∣ t = t b j ) = ∑ i ∣ t = t ∑ j ∣ t = t ( a i × b j ) = ∑ ( i ∣ j ) ∣ t = t ( a i × b j ) = F M T ( c t ) FMT(a_t) \times FMT(b_t) \\ =(\sum_{i|t=t}a_i) \times (\sum_{j|t=t}b_j) \\ = \sum_{i|t=t} \sum_{j|t=t} (a_i \times b_j) \\ = \sum_{(i|j)|t=t}(a_i \times b_j) \\ =FMT(c_t) FMT(at)×FMT(bt)=(it=tai)×(jt=tbj)=it=tjt=t(ai×bj)=(ij)t=t(ai×bj)=FMT(ct)
由此可得 F M T ( a t ) × F M T ( b t ) = F M T ( c t ) FMT(a_t) \times FMT(b_t)=FMT(c_t) FMT(at)×FMT(bt)=FMT(c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值