枚举子集为什么是 O(3^n) 的
这是更新日志
- 代数推导
- 组合意义,构建 TOC
枚举子集
枚举子集为什么是 的 .
考虑 一种常见的枚举子集方式:
for (int s = u; s; s = (s - 1) & u) {
// s 是 u 的一个非空子集
}
显然单次枚举 的一个子集是 的 .
复杂度证明
组合意义天地灭,代数推导保平安。
代数推导
为什么枚举 的所有子集的子集的时间复杂度是 的 .
显然枚举大小为 的集合 的复杂度是
不难发现, 中大小为 的子集个数是 ,这是简单的组合数学知识 .
转而枚举 ,于是原式就化为
然后里面这个东西可以由众所周知的谔项式定理化简
于是,枚举 的所有子集的子集的时间复杂度是 的 .
证毕 .
组合意义
OI-Wiki 那个奇妙的组合意义解法没看懂 .
大概就是考虑每个元素然后计数有多少个集合包含它,吧 .
《这显然是个双射》
Summary
一个集合 所有子集的子集数之和为 .
感谢 SoyTony 神仙的指导 orz
感谢 fjy666 神仙的指导 orz
感谢 Alpha1022 神仙的指导 orz
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/15876755.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2021-02-09 浅谈简单动态规划