** O(n)时间**和** O(n)空间**复杂度的功率集解决方案?

时间:2018-06-21 13:51:41

标签: algorithm big-o subset subset-sum

是否有可能在 O(n)时间 O(n)空间复杂度中找到集合的所有可能子集(即幂集)?

已放入程序 >> {a,b,c}

预期的投入时间 O(n))和 O(n)空间复杂度,这里n为3。

{},{a},{b},{c},{a,b},{b,c},{a,c},{a,b,c}

1 个答案:

答案 0 :(得分:5)

时间复杂度

不。时间复杂度将始终受到输出大小的限制。由于大小为 n 的集合的幂集的大小为 2 n ,因此没有算法可以找到小于 O的幂集(2 n

空间复杂度

空间而言,由于输出的大小为 2 n ,因此您做不到的任何事情都不会比 O (2 n

尽管就辅助空间而言,给定大小为 n 的集合 s ,幂集的任何元素都可以用二进制表示长度为 n 的字符串。表示 s 的元素 x 是否在集合中的每个位置。

通过示例,给定集合{a, b, c},字符串101代表子集{a, c}

尤其是因为二进制字符串是整数的表示形式,所以您可以在集合上定义一些顺序并枚举其元素。作为中间存储,这只需要一个整数,其大小不超过 O(n)

这在实现生成器的语言中特别有用,在该生成器中,如果功率集几乎没有辅助存储,则可以遍历所有元素。