该powerset函数的时间复杂度是多少?

时间:2019-05-03 14:53:38

标签: python python-3.x algorithm bit-manipulation powerset

我从leetcode https://leetcode.com/problems/subsets/submissions/解决了这个问题(powerset函数),这是我的解决方案:

Future

我很难分析这段代码的时间复杂度,语句 def subsets(nums): res = [] n = len(nums) for subset_id in range(2**n): tmp = [] for index in range(n): if 1 << index > subset_id: break if subset_id >> index & 1: tmp.append(nums[index]) res.append(tmp) return res 使它位于if 1 << index > subset_id: break之下,但是会一直到O(n*2^n)吗?我不知道很难说。

1 个答案:

答案 0 :(得分:2)

如果我们假设内部循环在每次击中range(n)之前都要经过break的一半,那么它就是O(n/2*2^n),实际上仍然是{{1 }}。这适用于循环的任何固定部分,因此即使平均为O(n*2^n)的十分之一而不是一半,它仍然为range(n)