这个算法的大哦是n ^ 3而不是n ^ 2

泰元允
def triangles(A):
  n = len(A)
  result = 0
  for x in xrange(n):
    z=x+2
    for y in xrange(x + 1, n):
      while (z < n and A[x] + A[y] > A[z]):
        z += 1
      result += z - y - 1
  return result

这是Codility解决方案的一个示例(https://codility.com/media/train/13-CaterpillarMethod.pdf

他们在手册中声称此算法的大Oh为O(N ^ 2)

但是我认为big-Oh是O(N ^ 3),因为最坏的情况是

(n-1)(n-2)+(n-2)(n-3)+ ..... + 1 * 0

所以我认为它的大哦是O(N ^ 3)。

谁能解释为什么该算法的big-Oh是O(N ^ 2)?

还是我说的对吗?

dfrib

while遍历z意志,accumulately,只运行一次<n次)为每次执行for循环以上y,由于z是仅重置在范围的的for遍历y因此,“内部范围”的粗略上限循环计数沿线n*(n+n)(位于中O(n^2))而不是n*n*n在计算复杂度时,我们不妨将while循环z视为与循环平行for循环y,而不是嵌套for循环中的一个循环y

即,与例如相同的复杂度:

def triangles(A):
  n = len(A)
  result = 0
  for x in xrange(n):
    z=x+2
    while (z < n)
      z += 1
    for y in xrange(x + 1, n):
      ...
  return result

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这个简单的O(n)Haskell算法表现得更像O(2 ^ n)?

来自分类Dev

大 O 符号示例表明 N^2 不是 O(n)

来自分类Dev

为什么程序员更喜欢O(N ^ 3)而不是O(N ^ 2)

来自分类Dev

算法,大O表示法:这是函数O(n ^ 2)?或为O(n)?

来自分类Dev

算法分析大哦

来自分类Dev

从O(n ^ 3)到O(n ^ 2)优化算法

来自分类Dev

如何为n列而不是3列写awk'{print $ 1 + $ 2 + $ 3} file1> file2?

来自分类Dev

改进 O(n^2) 算法

来自分类Dev

2 ^ n`是`3 ^ n的顺序

来自分类Dev

2 ^ n`是`3 ^ n的顺序

来自分类Dev

为什么这个程序打印 3 而不是 2?

来自分类Dev

f(n)的大O = N!+ 2 ^ N

来自分类Dev

我认为这个程序是 O(n) 运行时是不是疯了?我的助教说是 O(n^2)

来自分类Dev

我是否可以说Θ(n ^ 3/2)时间算法比Θ(n log n)时间算法渐近慢?

来自分类Dev

为什么是 2^n 而不是 n!:算法设计手册:1.2 选择正确的工作(第 10 页)

来自分类Dev

2 ^ n大O的示例

来自分类Dev

这个函数是O(n ^ 2log_2(n))吗?

来自分类Dev

为什么斐波那契数列是大O(2 ^ n)而不是O(logn)?

来自分类Dev

声称 2n^2 = O(n^3) 的大 O 符号示例?

来自分类Dev

使用Prim算法从O(n ^ 3)到O(n ^ 2)优化MST

来自分类Dev

使用Prim算法从O(n ^ 3)到O(n ^ 2)优化MST

来自分类Dev

O(N ^ 2)最短路径算法

来自分类Dev

该算法是否在N ^ 2中?

来自分类Dev

迭代O(2 ^ n)算法的示例

来自分类Dev

该算法是否在N ^ 2中?

来自分类Dev

增加n ^ 2时间的算法

来自分类Dev

如何计算大n的2 ^ n?

来自分类Dev

为什么O(n / 2 + 5 log n)O(log n)而不是O(n log n)?

来自分类Dev

递归打印n,n-1,n-2,... 3,2,1,2,3,... n

Related 相关文章

热门标签

归档