Algorithm 这个算法是';s Big oh是n^3而不是n^2 def三角形(A): n=len(A) 结果=0 对于x范围内的x(n): z=x+2 对于x范围内的y(x+1,n): 而(zA[z]): z+=1 结果+=z-y-1 返回结果

Algorithm 这个算法是';s Big oh是n^3而不是n^2 def三角形(A): n=len(A) 结果=0 对于x范围内的x(n): z=x+2 对于x范围内的y(x+1,n): 而(zA[z]): z+=1 结果+=z-y-1 返回结果,algorithm,big-o,Algorithm,Big O,这是Codibility()中解决方案的一个示例 在手册中,他们声称这个算法的最大Oh是O(N^2) 我认为大Oh是O(N^3),因为最坏情况下的迭代将是O(N^3) (n-1)(n-2)+(n-2)(n-3)+……+1*0 所以我认为它的最大值是O(N^3) 有谁能解释为什么这个算法的最大Oh是O(N^2) 或者我说的对吗?对于x的每个值,z只能增加到n倍。一旦z等于n,则在再次增加x之前,不可能迭代内部循环。因此,n内循环的x的n迭代值给出n^2而循环z将累计只运行一次((n-1)(n-2)

这是Codibility()中解决方案的一个示例

在手册中,他们声称这个算法的最大Oh是O(N^2)

我认为大Oh是O(N^3),因为最坏情况下的迭代将是O(N^3)

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

所以我认为它的最大值是O(N^3)

有谁能解释为什么这个算法的最大Oh是O(N^2)


或者我说的对吗?

对于
x
的每个值,
z
只能增加到
n
倍。一旦
z
等于
n
,则在再次增加
x
之前,不可能迭代内部循环。因此,
n
内循环的
x
n
迭代值给出
n^2
循环
z
将累计只运行一次(
(n-1)(n-2)+(n-2)(n-3)+…+1*0
可以表示为
a*n^2+b*n+c
a
b
c
是常量)。不是基于代码,但您认为公式仍然是
O(n^2)
。我想在(n-1)(n-2)+(n-2)(n-3)中表达的意思+..…+1*0公式是每个和有n个数,因此n*n^2将发生。感谢由“y”生成的循环不计数?y循环为x的每个值运行n次,与内循环相同。但两个内循环的总复杂度都以
n
为界。谢谢你,我在的for循环中教了初始值设定项y@TaeWonYo当
z
for
循环
x
范围的开头声明时,正是
z
for
循环
x
范围内包含的其他循环中“存在”(事实上,不能推断出
z
的其他声明,即使是隐式的)。
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
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