子集反演
子集反演
对于两个集合的函数 \(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.}\)
应用
核心: 「包含」和「恰好」之间的转化.
待补.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现