【发布时间】:2020-01-16 03:06:53
【问题描述】:
//outer for loop runs at most n times
for (int w = 1; w < n; w++) {
// inner for loop at most log(73550/n) times
for (int y = w; y < 73550; y = y * 2) {
x = x + w;
}
k = k * w;
}
我真的很困惑第二个循环是否会增加大 O 时间复杂度,因为它有一个设置的最大迭代?大 O 会是 O(n)、O(nlog(1/n)) 还是两者都不是??
int p = 0;
int q = 0;
//runs at most 18n^2 times
while (p < 18 * n * n) {
if (p % 2 == 0) {
q++;
}
p++;
}
//p = 18n^2 q1 = 9n^2
//runs at most log(9n^2) times
for (int r = 1; r < q; r = r * 3) {
q++;
}
return p * q;
像这样的顺序函数的时间复杂度只是更大的时间复杂度吧?所以它将是 O(n^2) ?
//runs at most n(4n-1) times
for (int k = 2; k <= 2n(4n-1); k+=2) {
j++;
}
即使是 -1,时间复杂度也会是 O(n^2) 对吧?
【问题讨论】:
-
我们不是认为定义复杂度的输入数据集最差吗?
-
这些循环会终止吗?
-
是的,值 n 只是传递给函数的一些整数值。 @MitchelPaulin
标签: c++ algorithm time-complexity big-o