【问题标题】:Give the Big-O estimates给出 Big-O 估计值
【发布时间】:2017-07-21 05:02:24
【问题描述】:

我应该确定这个算法的时间复杂度:

x:=1                       // (1) 
for i:=1 to n do           // (3n+1)
    for j:=1 to i do       // (3n)
        x:=max(x, i*j)     // 3*(3n+1)*(3n)
return x

我得到了 O(n2),但这不是正确的答案。我的错在哪里?

【问题讨论】:

  • 预期的答案是什么?
  • 你为什么认为你犯了错误?

标签: algorithm time big-o


【解决方案1】:

时间复杂度为O(n*(n+1)) ~ O(n*2)。因为直到 i 的第二个循环每次都会运行 (1,2,3,4....) 次。

【讨论】:

  • O(n*(n+1) / 2) = O(n*n/2 + n/2) = O(n**2 + n)/2 = O(n**2 + n) = O(n**2)
【解决方案2】:

是的,你是对的,复杂度将是 O(n^2)。由于执行X := max(X,i*j) n(1+n)/2 次,我们可以得到 n^2/2

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 2015-07-28
    • 2022-09-09
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多