【问题标题】:Leetcode 78 - Generate power set time complexityLeetcode 78 - 生成幂集时间复杂度
【发布时间】:2020-12-25 08:14:10
【问题描述】:

Leetcode 78 question 潜在解决方案:

class Solution(object):
    def __init__(self):
        self.map = {}
    
    def helper(self, count, nums, vals, result):       
        
        if count == 0:
            result += [vals]        
            
        for i in range(len(nums)):
            self.helper(count - 1, nums[i+1:], vals + [nums[i]], result)
        
    
    def subsets(self, nums):
        result = []
        result.append([])
        
        for count in range(1,len(nums)+1):
            self.helper(count, nums, [], result)   
            
        return result

对于上述解决方案,时间复杂度是O(2^n)还是O(n * 2^n)?

【问题讨论】:

    标签: python algorithm time-complexity code-complexity


    【解决方案1】:

    可以通过查找不同的N 来找出复杂性,helper 函数被调用了多少次,代码方面如下所示:

    class Solution(object):
    
        def __init__(self):
            self.map = {}
            self.counter = 0
    
        def helper(self, count, nums, vals, result):
            self.counter += 1
            if count == 0:
                result += [vals]
    
            for i in range(len(nums)):
                self.helper(count - 1, nums[i + 1:], vals + [nums[i]], result)
    
        def subsets(self, nums):
            result = [[]]
    
            for count in range(1, len(nums) + 1):
                self.helper(count, nums, [], result)
    
            return self.counter
    

    所以对于:

    N Time the helper function gets called
    1 2
    2 8
    3 24
    4 64
    5 160
    6 384
    7 896
    8 2048
    9 4608
    10 10240
    ... ....
    N O(n * 2^n)

    helper 函数的复杂度为 O(2^n),因为您调用了列表中的每个元素 nums

    for count in range(1,len(nums)+1):
        self.helper(count, nums, [], result)  
    

    整体时间复杂度为O(n * 2^n)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多