[英]What is the time complexity of this powerset function?
我從leetcode https://leetcode.com/problems/subsets/submissions/解決了這個問題(powerset函數),這是我的解決方案:
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)
但會一直下降到O(2^n)
? 我不知道這很難說。
如果我們假設內部循環在每次到達中break
之前都要經過range(n)
一半,那么它就是O(n/2*2^n)
,實際上仍然是O(n*2^n)
。 這適用於循環的任何固定部分,因此即使平均range(n)
的十分之一而不是一半,它仍為O(n*2^n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.