确定 for 循环的不同大 O 复杂度
determining different big O complexity for for loops
//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( 对吧?
第一种情况:O(n)
,因为正如您所说,循环迭代次数有一个常数限制。 在循环边界上具有非常大的常量并不常见,因此这在大多数自然算法中往往不是什么大问题。 如果 73550 实际上是一个非常量变量,但与 n 无关,我们可以给它起一个名字(例如 m(,并说复杂度是O(n*log(m))
。
第二种情况:是的,O(n^2)
,因为你给出的原因。
第三种情况:是的,O(n^2)
。 首先,big-O 只提供上限,所以 -1 只会更容易保证边界。 其次,即使你的意思是Ө(n^2)
,它仍然是,因为n(4n-1) = 4n^2-n
,对于某些常数k
,它渐近大于k*n^2
。 在这种情况下,任何k
都小于 4。
相关文章:
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- C++中 std::map 的运行时复杂度是多少?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 确定 for 循环的不同大 O 复杂度
- 此print_star函数的运行时复杂度是多少?
- 查找数字是否为 2 的幂的时间复杂度
- 内部 for 循环的时间复杂度