Math 如何将此循环转换为big-o表示法

Math 如何将此循环转换为big-o表示法,math,for-loop,Math,For Loop,问题是: 对于下面给出的伪代码,T是运行第i行的or指令周期,以大O表示法提供总执行时间 // get a positive integer from input if n > 10 print "this might take a while" for k=1 to n for j = 1 to k print k*j print "Done!" 事实上,我知道这段代码的作用,但我不明白如何用big-O表示法键入它 编辑:内部循环运行n*(n+1)/2,因此是O(n^2

问题是: 对于下面给出的伪代码,T是运行第i行的or指令周期,以大O表示法提供总执行时间

// get a positive integer from input
if n > 10
  print "this might take a while"
for k=1 to n
  for j = 1 to k
    print k*j
print "Done!"
事实上,我知道这段代码的作用,但我不明白如何用big-O表示法键入它

编辑:

内部循环运行n*(n+1)/2,因此是O(n^2)

外部循环将迭代n次,这一部分很简单。因为它除了运行内部循环之外没有任何作用,所以为了进行大O计算,我们可以忽略它。内部循环将迭代
1+2+3+4…+n
是a的次数或
(n*(n+1))/2
。大O表示法忽略常量,因此可以简化为
O(n*n)
O(n^2)


值得注意的是,该算法的最坏、最好和平均情况都是相同的。

不,事实并非如此@Schwern@Philosopher是的,因为O表示法是一个表达式,表示当n变大时运行时的增长速度。它是一个工具,用于将相似的算法组合在一起,以便对运行时进行总体比较,因此它忽略常量。但是,我相信他得到的公式是错误的。@公式
n*(n/2)
对于内部循环的运行时是错误的。它给出了序列
0.5,2,4.5,8,12.5…
,正确的公式是
(n*(n+1))/2
,这是
1,3,6,10,15…
令人痛心的是,当它们都呈指数增长时,它得到了相同的O近似值。嗨,修正了公式的完整性。让我做一些其他的修正:
N*N/2
N*(N+1)/2
都是多项式增长,而不是指数增长。大O不仅仅丢弃常数,它忽略了和中所有的低阶分量。这就是为什么精确的公式对于复杂度计算并不重要。它是通常决定缩放的最高阶项。如果是乘法,就不能丢弃较低复杂度的项。即,平均快速排序是
O(N*logn)
,而不是
O(N)
for k=1 to n
  for j = 1 to k
    print k*j