解决多项式的位运算卷积问题以及子集和
o r \color{00ffcc}{ \tt{or} } or卷积
C k = ∑ i o r j = k A i × b j C_k=\sum_{i{\color{00ffcc}{\tt{or}}} j=k}A_i\times b_j Ck=iorj=k∑Ai×bj
设 F W T ( A ) [ i ] = ∑ j o r i = i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{or}}} i=i}A_j FWT(A)[i]=∑jori=iAj,换句话说, F W T S FWT_S FWTS相当于 S S S的子集和
F W T ( A + B ) = F W T ( A ) + F W T ( B ) FWT(A+B)=FWT(A)+FWT(B) FWT(A+B)=FWT(A)+FWT(B)
根据 F W T FWT FWT的定义可得
分治计算 F W T FWT FWT
对于有 2 n 2^n 2n项的多项式 A A A,前 2 n − 1 2^{n-1} 2n−1项构成的多项式为 A 0 A_0 A0,后 2 n − 1 2^{n-1} 2n−1项构成的多项式为 A 0 A_0 A0
F W T ( A ) = { F W T ( A 0 ) , F W T ( A 0 + A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{ \begin{aligned}FWT(A_0),FWT(A_0+A_1)&&n\not=0\\A&&n=0\end{aligned} \right. FWT(A)={FWT(A0),FWT(A0+A1)An=0n=0
式子中,
的意思是拼接两个多项式
证明
n = 0 n=0 n=0时显然
n ≠ 0 n\not=0 n=0时
- 对于前半个式子, A 1 A_1 A1无法产生贡献
- 对于后半个式子,考虑合并 A 0 A_0 A0和 A 1 A_1 A1的贡献,去掉最高位后相加再做 F W T FWT FWT即可
F W T ( A o r B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{or}}} B)=FWT(A)\times FWT(B) FWT(AorB)=FWT(A)×FWT(B)
设 F W T ( A ) × F W T ( B ) = ∑ i F W T ( A ) [ i ] × F W T ( B ) [ i ] × x i FWT(A)\times FWT(B)=\sum_{i}FWT(A)[i]\times FWT(B)[i]\times x^i FWT(A)×FWT(B)=∑iFWT(A)[i]×FWT(B)[i]×xi
证明
数学归纳法
n = 0 n=0 n=0时显然
n ≠ 0 n\not=0 n=0时,
F W T ( A o r B ) = F W T ( ( A o r B ) 0 , ( A o r B ) 1 ) FWT(A{\color{00ffcc}{\tt{or}}} B)=FWT((A{\color{00ffcc}{\tt{or}}} B)_0,(A{\color{00ffcc}{\tt{or}}} B)_1) FWT(AorB)=FWT((AorB)0,(AorB)1)
= F W T ( A 0 o r B 0 , A 0 o r B 1 + A 1 o r B 0 + A 1 o r B 1 ) =FWT(A_0{\color{00ffcc}{\tt{or}}} B_0,A_0{\color{00ffcc}{\tt{or}}} B_1+A_1{\color{00ffcc}{\tt{or}}} B_0+A_1{\color{00ffcc}{\tt{or}}} B_1) =FWT(A0orB0,A0orB1+A1orB0+A1orB1)
= F W T ( A 0 o r B 0 ) , F W T ( A 0 o r B 0 + A 0 o r B 1 + A 1 o r B 0 + A 1 o r B 1 ) =FWT(A_0{\color{00ffcc}{\tt{or}}} B_0),FWT(A_0{\color{00ffcc}{\tt{or}}} B_0+A_0{\color{00ffcc}{\tt{or}}} B_1+A_1{\color{00ffcc}{\tt{or}}} B_0+A_1{\color{00ffcc}{\tt{or}}} B_1) =FWT(A0orB0),FWT(A0orB0+A0orB1+A1orB0+A1orB1)
= F W T ( A 0 ) × F W T ( B 0 ) , F W T ( A 0 ) × F W T ( B 0 ) + F W T ( A 1 ) × F W T ( B 0 ) + F W T ( A 0 ) × F W T ( B 1 ) + F W T ( A 1 ) × F W T ( B 1 ) =FWT(A_0)\times FWT(B_0),FWT(A_0)\times FWT(B_0)+FWT(A_1)\times FWT(B_0)+FWT(A_0)\times FWT(B_1)+FWT(A_1)\times FWT(B_1) =FWT(A0)×FWT(B0),FWT(A0)×FWT(B0)+FWT(A1)×FWT(B0)+FWT(A0)×FWT(B1)+FWT(A1)×FWT(B1)
= F W T ( A 0 ) × F W T ( B 0 ) , ( F W T ( A 0 ) + F W T ( A 1 ) ) × ( F W T ( B 0 ) + F W T ( B 1 ) ) =FWT(A_0)\times FWT(B_0),(FWT(A_0)+FWT(A_1))\times (FWT(B_0)+FWT(B_1)) =FWT(A0)×FWT(B0),(FWT(A0)+FWT(A1))×(FWT(B0)+FWT(B1))
= ( F W T ( A 0 ) , F W T ( A 0 + A 1 ) ) × ( F W T ( B 0 ) , F W T ( B 0 + B 1 ) ) =(FWT(A_0),FWT(A_0+A_1))\times (FWT(B_0),FWT(B_0+B_1)) =(FWT(A0),FWT(A0+A1))×(FWT(B0),FWT(B0+B1))
= F W T ( A ) × F W T ( B ) =FWT(A)\times FWT(B) =FWT(A)×FWT(B)
I F W T IFWT IFWT
反着做就好了
I F W T ( A ) = I F W T ( A 0 ) , I F W T ( A 1 ) − I F W T ( A 0 ) IFWT(A)=IFWT(A_0),IFWT(A_1)-IFWT(A_0) IFWT(A)=IFWT(A0),IFWT(A1)−IFWT(A0)
a n d {\color{00ffcc}{\tt{and}}} and卷积
C k = ∑ i a n d j = k A i × B j C_k=\sum_{i{\color{00ffcc}{\tt{and}}}j=k}A_i\times B_j Ck=iandj=k∑Ai×Bj
设 F W T ( A ) [ i ] = ∑ j a n d i = i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{and}}}i=i}A_j FWT(A)[i]=∑jandi=iAj
F W T ( A ) = { F W T ( A 0 + A 1 ) , F W T ( A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{ \begin{aligned}FWT(A_0+A_1),FWT(A_1)&&n\not=0\\A&&n=0\end{aligned} \right. FWT(A)={FWT(A0+A1),FWT(A1)An=0n=0
证明
显然
F W T ( A a n d B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{and}}}B)=FWT(A)\times FWT(B) FWT(AandB)=FWT(A)×FWT(B)
设 F W T ( A ) × F W T ( B ) = ∑ i F W T ( A ) [ i ] × F W T ( B ) [ i ] × x i FWT(A)\times FWT(B)=\sum_{i}FWT(A)[i]\times FWT(B)[i]\times x^i FWT(A)×FWT(B)=∑iFWT(A)[i]×FWT(B)[i]×xi
数学归纳法
n = 0 n=0 n=0时显然
n ≠ 0 n\not=0 n=0时
F
W
T
(
A
a
n
d
B
)
=
F
W
T
(
(
A
a
n
d
B
)
0
,
(
A
a
n
d
B
)
1
)
FWT(A{\color{00ffcc}{\tt{and}}}B)=FWT((A{\color{00ffcc}{\tt{and}}}B)_0,(A{\color{00ffcc}{\tt{and}}}B)_1)
FWT(AandB)=FWT((AandB)0,(AandB)1)
=
F
W
T
(
A
0
a
n
d
B
0
,
A
1
a
n
d
B
0
,
A
0
a
n
d
B
1
,
A
1
a
n
d
B
1
)
=FWT(A_0{\color{00ffcc}{\tt{and}}}B_0,A_1{\color{00ffcc}{\tt{and}}}B_0,A_0{\color{00ffcc}{\tt{and}}}B_1,A_1{\color{00ffcc}{\tt{and}}}B_1)
=FWT(A0andB0,A1andB0,A0andB1,A1andB1)
=
F
W
T
(
A
0
a
n
d
B
0
+
A
0
a
n
d
B
1
+
A
1
a
n
d
B
0
+
A
1
a
n
d
B
1
)
,
F
W
T
(
A
1
a
n
d
B
1
)
=FWT(A_0{\color{00ffcc}{\tt{and}}}B_0+A_0{\color{00ffcc}{\tt{and}}}B_1+A_1{\color{00ffcc}{\tt{and}}}B_0+A_1{\color{00ffcc}{\tt{and}}}B_1),FWT(A_1{\color{00ffcc}{\tt{and}}}B_1)
=FWT(A0andB0+A0andB1+A1andB0+A1andB1),FWT(A1andB1)
=
F
W
T
(
A
0
a
n
d
B
0
)
+
F
W
T
(
A
0
a
n
d
B
1
)
+
F
W
T
(
A
1
a
n
d
B
0
)
+
F
W
T
(
A
1
a
n
d
B
1
)
,
F
W
T
(
A
1
a
n
d
B
1
=FWT(A_0{\color{00ffcc}{\tt{and}}}B_0)+FWT(A_0{\color{00ffcc}{\tt{and}}}B_1)+FWT(A_1{\color{00ffcc}{\tt{and}}}B_0)+FWT(A_1{\color{00ffcc}{\tt{and}}}B_1),FWT(A_1{\color{00ffcc}{\tt{and}}}B_1
=FWT(A0andB0)+FWT(A0andB1)+FWT(A1andB0)+FWT(A1andB1),FWT(A1andB1
=
F
W
T
(
A
0
)
×
F
W
T
(
B
0
)
+
F
W
T
(
A
0
)
×
F
W
T
(
B
1
)
+
F
W
T
(
A
1
)
×
F
W
T
(
B
0
)
+
F
W
T
(
A
1
)
×
F
W
T
(
B
1
)
,
F
W
T
(
A
1
)
×
F
W
T
(
B
1
)
=FWT(A_0)\times FWT(B_0)+FWT(A_0)\times FWT(B_1)+FWT(A_1)\times FWT(B_0)+FWT(A_1)\times FWT(B_1),FWT(A_1)\times FWT(B_1)
=FWT(A0)×FWT(B0)+FWT(A0)×FWT(B1)+FWT(A1)×FWT(B0)+FWT(A1)×FWT(B1),FWT(A1)×FWT(B1)
=
(
F
W
T
(
A
0
)
+
F
W
T
(
A
1
)
)
×
(
F
W
T
(
B
0
)
+
F
W
T
(
B
1
)
)
,
F
W
T
(
A
1
)
×
F
W
T
(
B
1
)
=(FWT(A_0)+FWT(A_1))\times(FWT(B_0)+FWT(B_1)),FWT(A_1)\times FWT(B_1)
=(FWT(A0)+FWT(A1))×(FWT(B0)+FWT(B1)),FWT(A1)×FWT(B1)
=
(
F
W
T
(
A
0
+
A
1
)
,
F
W
T
(
A
1
)
)
×
(
F
W
T
(
B
0
+
B
1
)
,
F
W
T
(
B
1
)
)
=(FWT(A_0+A_1),FWT(A_1))\times (FWT(B_0+B_1),FWT(B_1))
=(FWT(A0+A1),FWT(A1))×(FWT(B0+B1),FWT(B1))
=
F
W
T
(
A
)
×
F
W
T
(
B
)
=FWT(A)\times FWT(B)
=FWT(A)×FWT(B)
I F W T IFWT IFWT
I F W T ( A ) = I F W T ( A 0 ) − I F W T ( A 1 ) , I F W T ( A 1 ) IFWT(A)=IFWT(A_0)-IFWT(A_1),IFWT(A_1) IFWT(A)=IFWT(A0)−IFWT(A1),IFWT(A1)
x o r {\color{00ffcc}{\tt{xor}}} xor卷积
设 F W T ( A ) [ i ] = ∑ j x o r i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{xor}}}i}A_j FWT(A)[i]=∑jxoriAj
F W T ( A ) = { F W T ( A 0 ) + F W T ( A 1 ) , F W T ( A 0 ) − F W T ( A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{\begin{aligned}FWT(A_0)+FWT(A_1),FWT(A_0)-FWT(A_1)&&n\not=0\\A&&n=0\end{aligned}\right. FWT(A)={FWT(A0)+FWT(A1),FWT(A0)−FWT(A1)An=0n=0
证明
显然
F W T ( A x o r B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{xor}}}B)=FWT(A)\times FWT(B) FWT(AxorB)=FWT(A)×FWT(B)
显然
I F W T IFWT IFWT
I F W T ( A ) = I F W T ( A 0 ) + I F W T ( A 1 ) 2 , I F W T ( A 0 ) − I F W T ( A 1 ) 2 IFWT(A)=\frac{IFWT(A_0)+IFWT(A_1)}{2},\frac{IFWT(A_0)-IFWT(A_1)}{2} IFWT(A)=2IFWT(A0)+IFWT(A1),2IFWT(A0)−IFWT(A1)