[Entertain] 一则容斥原理复杂度分析

[Entertain] 一则容斥原理复杂度分析

可以感受推式子的过程其实是无意间在用组合意义转化的

本文同一用 \(\cap\) 表示按位与,\(\cup\) 表示按位或,\(\vert S\vert\) 表示 \(\operatorname{popcount}(S)\)

有一个对于所有 \(S\in[0,2^n-1]\) 的所有 \(S\) 计算 \(f_{i}=\sum_{T}[|S\cap T|=i]\) 的容斥过程,总复杂度表示为:

\[\sum_{S}|S|\sum_{T\subseteq S}1 \]

转化求和顺序

\[\sum_{T}\sum_{T\subseteq S}|S| \]

在此处放缩 \(|S|\le n\) 可以得到原式的上界 \(\mathcal O(n3^n)\)。但是稍后说明这也是它的下界。

转写 \(|S|\)

\[\sum_{T}\sum_{T\subseteq S}\sum_{i=0}^{n-1}[S[i]=1] \]

调换求和顺序

\[\sum_{i=0}^{n-1}\sum_{T}\sum_{T\subseteq S}[S[i]=1] \]

拆开后面部分,下设 \(U=2^n-1\),则 \(U\setminus S\) 就是 \(S\) 按位取反。

\[\sum_{i=0}^{n-1}\sum_{T}(2^{|U\setminus T|}[T[i]=1]+[T[i]=0]2^{|U\setminus T|-1}) \]

换成

\[\sum_{i=0}^{n-1}\sum_{T[i]=1}2^{n-|T|}+\frac{1}{2}\sum_{i=0}^{n-1}\sum_{T[i]=0}2^{n-|T|}\tag{F(n)} \]

可知

\[\Theta(F(n))=\sum_{i=0}^{n-1}\sum_{T}2^{n-|T|} \]

集合与它的补集是一一对应的,转写成

\[\sum_{i=0}^{n-1}\sum_{T}2^{|T|} \]

枚举集合大小

\[n\sum_{i=0}^{n}{n\choose i}2^i \]

式子的后半部分是二项式定理展开 \((1+2)^n\) 的结果

\[n(1+2)^n=n3^n \]

故原式复杂度 \(\Theta(n3^n)\)

posted @ 2025-04-18 10:07  haozexu  阅读(3)  评论(0)    收藏  举报