【问题标题】:Python - Complexity of O(n^2) number of jumps in listPython - 列表中 O(n^2) 跳转次数的复杂性
【发布时间】:2021-01-15 19:58:54
【问题描述】:

如果一个列表有 3 个元素,那么 O(n^2) 意味着我们必须进行 9 次跳转来导航 3 个元素的集合吗?如果一个跳跃只是一个元素,怎么可能是9个跳跃?

list = [1, 2, 3]

我不明白作者的意思是我们必须跳9..有人可以解释一下吗?

【问题讨论】:

  • 我认为这只是一个笼统的说法,这意味着 O(n2) 意味着将循环列表翻倍。例如,当您想在列表中查找每个元素的重复项并在循环中循环两次时,复杂度为 O(n2)
  • 复杂度取决于您要完成的任务,对于某些任务,您必须遍历列表一次(然后是 O(n)),另外两次(O( n^2)) 等...查看solid.py的答案示例!

标签: python list time-complexity


【解决方案1】:

下面提供的代码示例是 O(n),因为它使用 for 循环迭代 n 元素。

n = len(list) # n = the length of the list here 3.
for i in range(0, n): # This runs n = 3 times, where n is the size of the list O(n)
    print(i)

现在考虑一个嵌套的 for 循环,这意味着您当前的 for 循环中的第二个循环。 这是 O(n^2),因为迭代了 n*n 元素。

n = len(list) # n = the length of the list here 3.
for i in range(0, n): # This runs n = 3 times.
   for j in range (0, n): # This runs n = 3 times for each value of the i.
       print(j)

这样想,上面的代码段在内循环中打印0, 1, 2的次数与外循环指定的次数一样多,在这种情况下为3。因此最后将打印0, 1, 2, 0, 1, 2, 0, 1, 2,这正是@987654329 @ = 3*3 = 9 元素。

【讨论】:

    【解决方案2】:

    O(n^2) 意味着要达到该输入的所需输出,您必须遍历所有输入数据两次,例如,如果您的解决方案包含一个嵌套循环,其中外部和内部循环都从 0 到 n(输入数据的大小)。

    您可以查看this 了解更多大 O 表示法编码示例。

    【讨论】:

      【解决方案3】:

      Big O 表示法为我们提供了对 N 个元素使用算法所必须执行的操作数量的估计,如果 Big O 表示法为 n,那么我们需要 n 次操作来执行该函数。 列表中的线性搜索需要 n 的大 O 为什么

      def linearsearch(numbers,s):
       for i in range(len(numbers)):
        if numbers[i] == s:
          return i
       return -1
      
      

      我们将寻找最坏的情况,即 s 不在列表中。为此,如果我们的列表大小为 n,我们将执行所有常量操作 n 次。 当n增加时间将线性增加,因为线性搜索所花费的时间取决于列表的大小

      如果所有常量操作都需要 c 时间,那么当我们对 5 个元素进行操作时需要 5c,如果我们对 10 个元素进行操作则需要 10c(这里我们假设列表中没有 s 的最坏情况)

      让我们看看 O(n2)

      如果我们有 n 个元素,那么所花费的时间将是 n 的平方

      让我们看看二维列表中的线性搜索

      
      Numbers = [[1,2,3][4,5,6]]
      
      def linearsearch(numbers,s):
       for inner in range(len(numbers)):
        for i in range(len(numbers[inner])):
         if numbers[inner][i] == s:
          return i
       return -1
      
      

      通过上面的代码,我们考虑一些假设来说明n2

      内部列表有 n 个元素,外部列表也有 n 个内部列表

      当我们需要在内部列表中搜索像 s 这样的元素时,我们需要执行 n2 次 thoe 操作 如果我们在内部列表中有 2 个元素,在外部列表中有 2 个内部列表 那么 4 c 将是平均时间,如果我们考虑 c 表示恒定操作所需的时间 3,3 然后 9 因此,如果我们在内部列表中有 n 个元素,那么 tims 复杂度将为 O(n2)

      【讨论】:

        猜你喜欢
        • 2021-08-30
        • 1970-01-01
        • 2021-04-14
        • 2019-04-08
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        相关资源
        最近更新 更多