我想了解如何推断该函数的渐近运行时间。
输入:包含n个整数A [1]至A [n]的数组A
输出:二维n×n数组B,其中i $ \ sum_ {k = i} ^ j A [k] = A [i] + A [i + 1] + ... A [j] $ 我试图计算出每行伪代码的运行时间 因此总运行时间为$ O(n ^ 3)$
我还需要计算出big- $ \ omega $ for i=1 to n O(n)
for j=i to n O(n^2)
add up array entries A[i] through A[j] O(n^3) ??
store result in b[i,j] O(n^2)
return B
答案 0 :(得分:0)
实现add up array entries A[i] through A[j]
的方式很重要:
for i = 1 to n
for j = i to n
sum = 0
for k = i to j
sum = sum + A[i]
b[i,j] = sum
return b
以上是O(n ^ 3)和Omega(n ^ 3),因此是Theta(n ^ 3)。但是,如果您以不同的方式计算sum
:
for i = 1 to n
sum = 0
for j = i to n
sum = sum + A[i]
b[i,j] = sum
return b
这是O(n ^ 2),Omega(n ^ 2)和Theta(n ^ 2)。对于您的特定问题-如果您像基于简单代码的问题那样进行运行时分析,则O和Omega通常将是相同的(也就是说,通常将获得Theta界限)。 Theta边界是查看特定实现时的规则,而不是例外。