子集反演

子集反演

对于两个集合的函数 \(f_S, g_S\):

\[f(S) = \sum_{T \subseteq S} g(T) \iff g(S) = \sum_{T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} f(T) \]

\(\tt{Proof}\)

证明一下,从等式右侧开始推:

\[\begin{align*} \sum_{T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} f(T) & = \sum_{T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} \sum_{Q \subseteq T} g(Q) \\ & = \sum_Q g(Q) \sum_{Q \subseteq T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} \end{align*} \]

后半部分求和与 \(Q\) 无关, 将后半部分剔除:

\[= \sum_Q g(Q) \sum_{ T \subseteq (S \setminus Q)} (-1)^{\lvert S \setminus Q \rvert - \lvert T \rvert} \]

记关于集合 \(P\) 的函数 \(\displaystyle F(P) = \sum_{T \subseteq P} (-1)^{\lvert P \rvert - \lvert T \rvert}\), 并且进行化简:

\[F(P) = \sum_{i = 0}^{\lvert P \rvert} \binom{\lvert P \rvert}{i} (-1)^{\lvert P \rvert - i} = \sum_{i = 0}^{\lvert P \rvert} (1 - 1)^{\lvert P \rvert} = 0^{\lvert P \rvert} \]

由此, 原式子的值为:

\[\sum_Q g(Q) \sum_{ T \subseteq (S \setminus Q)} (-1)^{\lvert S \setminus Q \rvert - \lvert T \rvert} = \sum_Q g(Q) \cdot F(S \setminus Q) = \sum_Q g(Q) \cdot 0^{\lvert S \setminus Q \rvert} \]

分析发现, 当且仅当 \(S \setminus Q = \emptyset\) 时有 \(0^0 = 1\), 此时 \(Q = S\), 对答案的贡献就是 \(g(S)\), 所以有:

\[\sum_Q g(Q) \cdot 0^{\lvert S \setminus Q \rvert} = g(S) \]

\(\mathcal{Q. E. D.}\)

应用

核心: 「包含」和「恰好」之间的转化.

待补.

posted @   Steven1013  阅读(14)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示