例题
FWT
考虑这样一个问题:
已知的是 \(a,b\) 序列,求解 \(c\) 序列,满足:\(c_i=\sum\limits_{j\otimes k=i} a_jb_k\)。
其中 \(\otimes\) 是某个二进制运算。
首先我们希望的是对于一个卷积操作,将其类似于 DFT,然后 IDFT 求解。
那么就需要考虑构造求点积的操作。
具体来说,构造:
\[X_{i}=\sum\limits_{j=0}^{n} w_{i,j} x_j
\]
求解出 \(A,B\),以及满足:
\[C_{i}=A_iB_i
\]
也就是说:
\[\sum\limits_{j=0}^{n} w_{i,j}c_j=\sum\limits_{j=0}^{n} w_{i,j}a_j\sum\limits_{k=0}^{n} w_{i,k}b_k
\]
\[\sum\limits_{j=0}^{n} w_{i,j}c_j=\sum\limits_{j=0}^{n} \sum\limits_{k=0}^{n} w_{i,j}w_{i,k}a_jb_k
\]
观察左右两式,可得:
\[w_{i,j}w_{i,k}=w_{i,j \otimes k}
\]
考虑二进制运算的优良性质:
设 \(p\) 的二进制表达为 \(p_0p_1p_2\dots\)
那么只需要 \(w_{0/1,0/1}\) 满足即可构造:
\[w_{i,j}=w_{i_0,j_0}w_{i_1,j_1}w_{i_2,j_2}\dots
\]
不难发现此时 \(w_{i,j}\) 也满足上述性质。
那么对于某种二进制运算 \(\otimes\) 只需要构造出 \(w_{0/1,0/1}\) 即可。
对于点积后,还原操作也就是 \(w\) 矩阵的逆矩阵。
构造 \(2\times 2\) 的 \(01\) 矩阵满足是 \(w_{0/1,0/1}\) 的逆矩阵后,类似于前面的构造即可。
都是简单而不繁琐的。
接下来问题在于快速求解 \(A\),和还原 \(c\)。
先将 \(n\) 补齐到二的幂次减一,然后这个考虑讨论二进制首位,然后分治递归子问题计算即可。
复杂度 \(O(n \log n)\)。
而对于扩展到 \(k\) 维空间是简单的,这里不再阐述。
符号化方法
定义组合类 \(\mathcal{A}\) 表示某个组合意义集合,其中每个元素都是某个组合排列,对于每个 \(a \in \mathcal{A}\) 都会映射到一个非负整数,记为 \(|a|\)。
定义符号化方法的普通生成函数(OGF)为:
\[A(x)=\sum\limits_{a \in \mathcal{A}} x^{|a|}=\sum\limits_{i=0}^{+\infty} a_ix^i
\]
那么可以类比普通生成函数定义出加法和笛卡尔积。
具体来说,加法就是:
\[C(x)=A(x)+B(x)
\]
\[\mathcal{C}=\mathcal{A}+\mathcal{B}
\]
而笛卡尔积就是:
\[C(x)=A(x)\times B(x)=\sum\limits_{(a,b) \in (\mathcal{A,B})} x^{|(a,b)|}=\sum\limits_{(a,b) \in (\mathcal{A,B})} x^{|a|+|b|}
\]
\[\mathcal{C}=\mathcal{A}\times \mathcal{B}
\]
同时定义类似单位元,注意是类似,不可直接当单位元使用:
\(\mathcal{E}\),满足内部元素有且只有一个,并且其映射到的值是 \(0\),即其 \(E(x)=1\)。
定义任意组合类 \(\mathcal{A}\) 的 \(0\) 次幂,\(\mathcal{A}^0=\mathcal{E}\)。
无标号经典构造(也即无标号体系)
1. \(\mathrm{Sequence}\) 构造
\(\mathrm{Sequence}\) 构造生成了所有可能组合。
也就是生成不定长序列:
\[\mathrm{SEQ}(\mathcal{A})=\mathcal{E}+\mathcal{A}+\mathcal{A}\times \mathcal{A}+\mathcal{A}\times \mathcal{A} \times \mathcal{A}+\dots
\]
\[\mathcal{B}=\mathrm{SEQ}(\mathcal{A})
\]
\[B(x)=\sum\limits_{i=0}^{+\infty} A(x)^i=\dfrac{1}{1-A(x)}
\]
2. \(\mathrm{Multiset}\) 构造
\(\mathrm{Multiset}\) 构造生成了所有可能组合。
\[\mathrm{MSET}(\mathcal{A})=\prod\limits_{a\in \mathcal{A}} \mathrm{SEQ}(\{ a \})
\]
\[\mathcal{B}=\mathrm{MSET}(\mathcal{A})
\]
\[B(x)=\prod\limits_{a\in \mathcal{A}} \left( 1-x^{|a|} \right)^{-1}=\prod\limits_{i=1}^{+\infty} \left( 1-x^i \right)^{-a_i}
\]
将等式两边先求 \(\mathrm{ln}\) 再求 \(\mathrm{exp}\):
\[B(x)=\mathrm{exp}\left(\sum\limits_{i=1}^{+\infty} -a_i\mathrm{ln}\left( 1-x^i \right)\right)
\]
\[B(x)=\mathrm{exp}\left(\sum\limits_{i=1}^{+\infty} a_i\sum\limits_{j \geq 1} \dfrac{x^{ij}}{j} \right)
\]
\[B(x)=\mathrm{exp}\left(\sum\limits_{i \geq 1} \dfrac{A\left(x^{i}\right)}{i} \right)
\]
我们称这种操作为 \(\mathrm{Exp}\),写作:
\[\mathrm{Exp}(A(x))=B(x)=\mathrm{exp}\left(\sum\limits_{i \geq 1} \dfrac{A\left(x^{i}\right)}{i} \right)
\]
3. \(\mathrm{Cycle}\) 构造
\(\mathrm{Cycle}\) 构造生成了所有可能环本质不同的组合。
设 \(C_k(x)\) 表示长度为 \(k\) 的环组成的生成函数根据\(\mathrm{Burside}\) 引理。
\[C_k(x)=\dfrac{1}{k} \sum\limits_{i=0}^{k-1}A\left(x^{k/\gcd(k,i)}\right)^{\gcd(k,i)}
\]
\[C_k(x)=\dfrac{1}{k} \sum\limits_{d|k}\varphi(d)A\left(x^{d}\right)^{k/d}
\]
在推导 \(C(x)\):
\[C(x)=\sum\limits_{k\geq 1} \dfrac{1}{k} \sum\limits_{d|k}\varphi(d)A\left(x^{d}\right)^{k/d}
\]
\[C(x)=\sum\limits_{d\geq 1} \dfrac{\varphi(d)}{d} \sum\limits_{k\geq 1} \dfrac{A\left(x^{d}\right)^{k}}{k}
\]
\[C(x)=\sum\limits_{d\geq 1} \dfrac{\varphi(d)}{d} \ln \left(\dfrac{1}{1-A\left(x^{d}\right)} \right)
\]
可以通过多项式 \(\ln\) 求出 \(\ln \left(\dfrac{1}{1-A(x)} \right)\),然后暴力枚举有值的 \(O(n/d)\) 位。
求和暴力累加。
4. \(\mathrm{Power\ Set}\) 构造
\(\mathrm{Power\ Set}\) 构造生成了所有可能 \(01\) 背包组合。
换而言之,即:
\[\mathrm{PSET}(\mathcal{A})=\prod_{a\in \mathcal{A}} \left( \{\mathcal{E} \}+\{\mathcal{a} \} \right)=\{\mathcal{B} \subseteq \mathcal{A}\}
\]
\[B(x)=\prod_{a\in \mathcal{A}} \left(1+x^{|a|}\right)=\prod_{i\geq 0} \left(1+x^{i}\right)^{a_i}
\]
同理,两边取 $\ln $ 再取 \(\exp\)。
\[B(x)=\exp\left(\sum_{i\geq 0} a_i \ln \left(1+x^{i}\right)\right)
\]
\[B(x)=\exp\left(\sum_{i\geq 0} a_i \sum_{j \geq 1} \dfrac{(-1)^{j-1}x^{ij}}{j}\right)
\]
\[B(x)=\exp\left(\sum_{j \geq 1} \dfrac{(-1)^{j-1}A\left(x^{j}\right)}{j}\right)
\]
有标号经典构造(也即有标号体系)
定义符号化方法的指数生成函数(EGF)为:
\[A(x)=\sum\limits_{a \in \mathcal{A}} \dfrac{x^{|a|}}{|a|!}=\sum\limits_{i=0}^{+\infty} a_i\dfrac{x^i}{i!}
\]
同理可以定义出加法和笛卡尔积,这里不再阐述。
1. \(\mathrm{Sequence}\) 构造
\(\mathrm{Sequence}\) 构造生成了不定长度序列的组合。
类似无标号情况:
\[\mathrm{SEQ}(\mathcal{A})=\mathcal{E}+\mathcal{A}+\mathcal{A}\times \mathcal{A}+\mathcal{A}\times \mathcal{A} \times \mathcal{A}+\dots
\]
\[\mathcal{B}=\mathrm{SEQ}(\mathcal{A})
\]
\[B(x)=\sum\limits_{i=0}^{+\infty} A(x)^i=\dfrac{1}{1-A(x)}
\]
2. \(\mathrm{Pointing}\) 构造
\(\mathrm{Pointing}\) 构造的组合意义就是拎出一个点作为图中特殊点。
即:
\[\mathcal{B}=\mathrm{PNT}(\mathcal{A})
\]
\[B(x)=xA^{\prime}(x)
\]
3. \(\mathrm{Set}\) 构造
\(\mathrm{Set}\) 构造出了不可重集的组合。
\[\mathcal{B}=\mathrm{SET}(\mathcal{A})
\]
\[B(x)=\sum\limits_{i\geq 1} \dfrac{A(x)^i}{i!}=\mathrm{exp}(A(x))
\]
4. \(\mathrm{Cycle}\) 构造
\(\mathrm{Cycle}\) 构造出了不可重集的组合。
\[\mathcal{B}=\mathrm{CYC}(\mathcal{A})
\]
\[B(x)=\sum\limits_{i\geq 1} \dfrac{A(x)^i}{i}=\ln \dfrac{1}{1-A(x)}
\]
另外,如果 \(G\) 为全体环和翻转置换构成的群,那么有:
\[B(x)=A(x)+\sum\limits_{i\geq 2} \dfrac{A(x)^i}{2i}=\dfrac{1}{2}\left(\ln \dfrac{1}{1-A(x)}+A(x)\right)
\]
ok,至此感觉也没啥好讲的了。