【发布时间】:2016-04-07 12:13:26
【问题描述】:
我只是在尝试不同的算法来练习,我遇到了这个问题,我必须生成给定元素集的所有子集(非重复)。
对此的简单解决方案是使用位掩码技术。但这具有指数时间复杂度,即 O(2^n)。在最坏的情况下,n 的值可以达到100000,所以在这种情况下 O(n^2) 的解决方案不是很明智。
我只是想知道是否有任何其他更有效的算法可以在 ~O(n^2) 中解决这个问题?
【问题讨论】:
-
你的意思是——有没有办法在 n^2 步中生成 2^n 个东西?也许是魔法。
-
真正的问题是你想用 2^n 集做什么。如果你真的需要输出它们,显然不可能花费少于 2^n 的时间。但是如果你想计算它们的一些聚合,即找到最大化/最小化某个属性的子集,它可能是可能的
-
@NiklasB。好吧,我无法说出整个问题,因为它来自现场比赛,我不想作弊。顺便说一句,谢谢你的解释。
-
@user 好的,这很公平。如果你愿意,你可以在比赛结束后询问,以防没有文章
-
我可以向您保证,在这种情况下您不需要枚举所有子集。祝你好运。