【问题标题】:Time complexity of a combination function组合函数的时间复杂度
【发布时间】:2023-02-22 14:20:10
【问题描述】:

我有这个功能,可以从数字列表中创建对。我们知道每次都会有n次选择2次迭代。那么这会使时间复杂度为 O(nC2) 吗? 还是 O(n^2)?

如果是 O(n^2) 为什么是 O(n^2)?该函数不会迭代那么多次,而且永远不会。

def find_pairs(nums):
    pairs = []
    for i in range(len(nums)):
        current = nums[i]

        for n in nums[i+1:]:
            pairs.append((current, n))

    return pairs

【问题讨论】:

  • 因为O是最坏的情况,在你的情况下它将是O(n**2)原因..你的内部循环将为每个元素迭代(n-1)(n)因此大约运行O(n ** 2)次..!

标签: python python-3.x big-o combinations


【解决方案1】:

以上代码的时间复杂度为O(n^2) 它总是会迭代 2 次,两次都是在 nums 上, 就在它完成current = nums[i] 之后,如果你的 secn 循环不在第一个循环中,它会再次迭代,比如这样

def find_pairs(nums):
    pairs = []
    for i in range(len(nums)):
        current = nums[i]

    for n in nums[i+1:]:
        pairs.append((current, n))

    return pairs

那么时间复杂度就是O(n)

【讨论】:

    【解决方案2】:

    时间复杂度与算法运行的确切次数无关,而是算法的扩展方式。

    在你的例子中,n choose 2 等于:

    n! / (2 * (n - 2)!)
    

    这可以简化为

    n * (n-1) / 2 = (n^2 - n) / 2
    

    如您所见,我们有一个二阶多项式函数(二次)。因此我们认为时间复杂度为O(n^2),因为它将按二次方缩放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多