【问题标题】:BigO time complexity of algorithm算法的 BigO 时间复杂度
【发布时间】:2012-02-09 22:39:52
【问题描述】:

这个算法的 bigO 时间是多少? 输入:数组 A 和 B 每个排序 n>=1 个整数 输出:B中的元素个数等于A中前缀和的总和

c=0
for i=0 to n-1 {
  s=0
  for j=0 to n-1 {
    s=s+A[0]
    for k=1 to j {
      s=s+A[k]
    }
  }
  if B[i]=s {
    c=c+1
  }
}
return c

我得到了 n(n+2)(n+2)+1,即 n^3+4n^2+4n+1,即 O(n^3)

【问题讨论】:

  • 我看到 2 个循环。一个基于 1/2,另一个 = O(n^2 / 2) = O(n^2)。冒泡排序。
  • 嘿。两个 cmets 说答案是正确的,然后 OP 改变了问题。

标签: algorithm data-structures big-o time-complexity


【解决方案1】:

如果您只是在这里寻找 BigO,您所要做的就是找出循环的数量,其中有多少是嵌套的。 在您的情况下,您有两个循环(嵌套),因此它将是 O(n * n) = O(n^2)

P.S 即使你的内循环没有像外循环那样多次,BigO 仍然保持不变。

【讨论】:

  • 这是基于旧版本的问题。根据您的修改,您需要为额外的循环再添加一个“n”,使其成为 O(nnn)
  • 嗯,它稍微比这更多。您必须计算每个内部循环每次通过外部循环执行的次数。
  • 确实如此,但最终在代表 BigO 时忽略了因素和常数。我的回答就是基于此。 :) 但感谢您指出。
  • @noMAD:我不同意你的概括。考虑以下内部循环:for (i = 0 to n) for (j=0 to n/i)。内部循环将重复n*Hn 次,其中Hnharmonic series,它将产生O(nlogn)。仅当内部循环的限制与外部循环的迭代次数成线性关系并且两个循环计数器都增加一个常数时,您的主张才是正确的。
【解决方案2】:

要确定增长顺序,正式地,您可以按以下方式进行:

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2013-12-31
    相关资源
    最近更新 更多