【问题标题】:How to measure time complexity如何测量时间复杂度
【发布时间】:2020-09-25 11:59:32
【问题描述】:
for i in range(array[0]*2):
     print ("Algorithms are awesome!")

for item in array:
    item *= 1000
    print(item)

for item in array:
    print(item)

我想知道时间复杂度。

【问题讨论】:

  • 如果您的代码是正确的,那么所有代码​​都是 O(n)。
  • 请正确格式化您的代码。无法判断这应该是三个单独的串联循环,还是一个嵌套循环,或其他组合。
  • 这是三个独立的循环串联在一个函数中。
  • 一般来说,算法复杂度是通过计算(如数学)而不是测量(如定时)来计算的。

标签: python for-loop time-complexity


【解决方案1】:

通常,您可以查看您的代码并考虑执行给定循环的次数。在您的情况下,所有三个循环都是线性的(O(n))。由于您的循环中只有赋值和 print() 语句(都可以在恒定时间 (O(1)) 内完成),因此总时间复杂度降至 O(n)。

【讨论】:

    【解决方案2】:

    从第一个开始。迭代次数不取决于输入的大小,而是取决于输入的数值(在您的情况下是列表的第一个元素)。
    这意味着您的算法具有pseudo-polynomial 时间复杂度。 所以时间复杂度是O(array[0])。作为伪多项式算法的示例,您可以考虑Knapsack Problem 的动态规划算法。

    for i in range(array[0]*2):
         print ("Algorithms are awesome!")
    

    对于其他两种情况,当您遍历列表时,它们都具有线性时间复杂度,并且 multiplicationprint 都可以被认为是基本操作,它们采用常数时间。

    for item in array:
        item *= 1000
        print(item)
    
    for item in array:
        print(item)
    

    【讨论】:

    • 如果我们认为输入的“数值”是一个数字 n,那么它就是 O(n)。无需复杂化。
    • 一旦你的迭代次数取决于输入的第一个元素,它就不再是线性时间算法了。所以区分第一种情况和其他情况很重要。
    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2012-08-14
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多