【问题标题】:Power set solution in **O(n) time** and **O(n) space** complexities?**O(n) 时间** 和 **O(n) 空间** 复杂性中的幂集解?
【发布时间】:2018-06-21 13:51:41
【问题描述】:

是否有可能在 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}

【问题讨论】:

    标签: algorithm big-o subset subset-sum


    【解决方案1】:

    时间复杂度

    没有。时间复杂度总是受限于输出的大小。由于一组大小为 n 的幂集的大小为 2n,因此没有算法可以在小于 O 的时间内找到幂集(2n).

    空间复杂性

    空间而言,由于输出的大小是2n,你不能做得比O更好(2n).

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多