1. 集合幂级数 exp/ln 在连通图计数问题中的应用中用子集卷积的 exp 求'所有子集的连通图数量',复杂度 O(n²·2^n)
集合幂级数的 exp/ln 如何用于连通图计数?如何用子集卷积的 exp 求"所有子集的连通图数量"?复杂度为什么是 O(n²·2^n)?
- 任意图与连通图的指数生成函数关系:G = exp(C),C = ln(G)
- 集合幂级数乘法即子集卷积(按 popcount 分层)
- O(n²·2^n) 的来源:n 层 popcount × 每层 O(2^n) FWT
在集合幂级数框架下,设 F(S) 为顶点集 S 上的任意图数量,C(S) 为 S 上的连通图数量。任意图由若干连通分量组成,而连通分量是 SET 构造(无标号顺序的组合),因此 F = exp(C),即 C = ln(F)。集合幂级数的乘法正是子集卷积:两个函数 A、B 的子集卷积定义为 (A*B)(S) = Σ_{T⊆S} A(T)·B(S\T),它等价于把函数按 popcount 分层(A_k(mask) = A(mask)·[popcount(mask)=k]),逐层做 FWT 后逐点相乘,再做逆变换并归位。exp/ln 在子集卷积意义下用幂级数展开 + 牛顿迭代(或直接按"ln 的导数形式"递推)实现,每次乘法 O(n·2^n)(n 层 × 每层 FWT O(2^n)),共需 O(n) 次乘法,故总复杂度 O(n²·2^n)。
本题考察"组合构造 ↔ 生成函数"的双向翻译:连通分量是任意图的分量分解,对应 SET 构造的 exp;反过来 ln 做连通性拆分。回答时先建立 F = exp(C) 的组合意义,再讲子集卷积的 popcount 分层实现与复杂度来源。