嵌套循环的时间复杂度
for (i=1; i<=n; i++) {
for (j=1; j<=log(i); j++) {
O(1);
}
}
其中n
由用户提供?时间复杂度仅取决于循环变量还是条件<=
?
答案 0 :(得分:0)
时间复杂度通常与用户输入无关(在这种情况下:n)。 第一个循环将执行n次迭代,第二个循环将在最坏的情况下执行log(n)次迭代。 由于你没有提供循环体,假设循环中的操作是O(1),那么复杂度是O(n log n)。
关于你的第二个问题,它取决于你的循环和“比较部分”(循环体)。
答案 1 :(得分:0)
时间复杂度取决于花费时间的所有内容,所以是的,它取决于for
循环的范围。它通常最好从内到外分析循环。所以
for (j=1; j<=log(i); j++) {
O(1);
}
将花费O(1)*log(i)=O(log(i))
时间。然后我们可以将整个循环写为
for (i=1; i<=n; i++) {
O(log(i));
}
此时最简单的方法就是将其全部添加。因此总时间是:
O(log(1))+O(log(2))+O(log(3))+...+O(log(n-2))+O(log(n-1))+O(log(n))
=O(log(1) + log(2) + log(3) +...+ log(n-2) + log(n-1) + log(n))
由于对数的属性,这是O(log(n!))
,而Stirling’s approximation则是O(n log(n))
。