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 返回结果
这是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)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)
或者我说的对吗?对于
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