简单伪码函数的渐近复杂度

时间:2019-10-22 08:34:32

标签: complexity-theory

我想了解如何推断该函数的渐近运行时间。

输入:包含n个整数A [1]至A [n]的数组A 输出:二维n×n数组B,其中i

$ \ sum_ {k = i} ^ j A [k] = A [i] + A [i + 1] + ... A [j] $

我试图计算出每行伪代码的运行时间

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

因此总运行时间为$ O(n ^ 3)$ 我还需要计算出big- $ \ omega $

的复杂性

1 个答案:

答案 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边界是查看特定实现时的规则,而不是例外。