使用算法计算最坏情况下的时间复杂度

时间:2016-04-04 02:21:31

标签: algorithm math time case

这是我的学习指南中的一个问题,但我不确定如何解决问题,甚至不知道代码"要做什么"手段。我已经看到其他一些问题也得到了解答,这些问题也在寻找最坏的情况时间复杂度,但没有任何类似于此问题的代码。我只是在寻找解决这些问题的一般方法,所以如果有方法,我真的很想得到一些帮助。问题如下。

Compute the worst case time complexity of the following algorithm.

for i = 1 to n do
    for j = 1 to i do
        for k = 1 to j do
            print(i,j,k).

2 个答案:

答案 0 :(得分:1)

在我看来,在这种情况下没有最佳或最坏情况时间复杂度,只有 时间复杂度。正如this维基百科文章中所提到的,最佳和最差情况通常适用于排序函数等函数,其中算法所花费的时间取决于输入的初始排序方式。因此,在您的情况下,按照下面的matlab代码的结果,我会说时间复杂度是

1/6*n*(n+1)*(n+2)

这是通过运行不同n值的代码得出的,并注意到n的每个增量都添加了相应的打印语句的三角形数,即

sum_{i = 1}^{n} 1/2*i*(i+1) = 1/6*n*(n+1)*(n+2)

Matlab代码:

n = 5;

count = 0;
for i = 1:n
    for j = 1:i
        for k = 1:j
            count = count + 1;
        end
    end
end

1/6*n*(n+1)*(n+2)
count

答案 1 :(得分:1)

此问题已经回答了一段时间,您可以查看herehere进行数学解释。

基本上,由于它是一个三重嵌套循环,最差的时间是 0(n³)