【发布时间】:2023-01-12 16:33:35
【问题描述】:
我正在努力理解计算时间复杂度的概念。我在 C 中有这段代码,为什么时间复杂度是 O(n) 而不是 O(n log n)? 第一个循环最多运行 3 次迭代,外部 for 循环是对数复杂度,并且它的每次迭代都是线性时间。
int f2 (int n)
{
int j, k, cnt=0;
do
{
++n;
} while (n%3);
for (j=n; j>0; j/=3)
{
k=j;
while (k>0)
{
cnt++;
k-=3;
}
}
return cnt;
}
为什么我们忽略日志时间?
【问题讨论】:
-
计算总和 n + n/3 + n/9 + n/27 + ... +1。
-
好的,当算法运行 O (n log n) 时?我怎样才能改进这些计算?
-
不知道你所说的改进是什么意思。您进行此计算并找出该算法的复杂性。对于不同的算法,您需要不同的计算。
标签: algorithm time-complexity big-o