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