如何将此循环转换为大 O 表示法
how to turn this loops to big-o notation
问题:
对于下面给出的伪代码,T 是第 i 行 运行 的或指令周期,以大 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!"
实际上我知道该代码的作用,但我不明白如何用大 O 表示法输入它?
编辑:loop as php
内循环是运行n*(n+1)/2,所以是O(n^2)
for k=1 to n
for j = 1 to k
print k*j
外层循环会迭代n次,这部分很简单。由于它除了 运行 内部循环外没有任何作用,我们可以出于大 O 计算的目的忽略它。内部循环将迭代 1 + 2 + 3 + 4 ... + n
次,即 triangular number 或 (n*(n+1))/2
。大 O 符号忽略常量,因此可以简化为 O(n*n)
或 O(n^2)
.
值得注意的是,该算法的最差、最佳和平均情况都是相同的。
问题: 对于下面给出的伪代码,T 是第 i 行 运行 的或指令周期,以大 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!"
实际上我知道该代码的作用,但我不明白如何用大 O 表示法输入它?
编辑:loop as php
内循环是运行n*(n+1)/2,所以是O(n^2)
for k=1 to n
for j = 1 to k
print k*j
外层循环会迭代n次,这部分很简单。由于它除了 运行 内部循环外没有任何作用,我们可以出于大 O 计算的目的忽略它。内部循环将迭代 1 + 2 + 3 + 4 ... + n
次,即 triangular number 或 (n*(n+1))/2
。大 O 符号忽略常量,因此可以简化为 O(n*n)
或 O(n^2)
.
值得注意的是,该算法的最差、最佳和平均情况都是相同的。