c - 基本时间复杂度?

标签 c algorithm loops time-complexity

考虑这三个循环

O(N^2)

int i = 0, s = 0;
while (2*i <= N*N) {
s+=i;
i++;
}

O(N)

int i = 0, s = 0;
while (s <= N*N) {
s+=i;
i++;
}

O(平方(N))

int i = 0, s=0, p=1;
while (s < N) {
i++;
p = p*i;
s += i;
}

第一个的时间复杂度是O(N^2),第二个是O(N)(我觉得N^2更合适)。怎么会?此外,为什么循环 3 是 sqrt(N) 而不是 log(N) - 我如何区分?

最佳答案

对于第二个: 假设迭代将是 k 然后循环将重复:

1+2+3+...k <= N^2 --> k*(k-1)/2 <= N^2 --> k^2 <= N^2 --> k is O(N).

对于第三个: 假设迭代将是 k 然后循环将重复:

1+2+3...+k <= N -->...--> k^2 <= N --> k is O( sqrt(N) ).

关于c - 基本时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412430/

相关文章:

python - 如何在 Python 中循环遍历两个字典

Python:设置函数的最大值并循环查找数组中下一个值的最大值

java - 如何检查变量是否为整数

c - 如何确定两个相似函数的效率更高

c - Recv 调用获取空数据

C++ 极小极大函数

ios - 是否可以在后台检测用户的移动事件?

mysql - 在Redis中搭建一个 'messages read'类型的队列系统的解决方案?

c - 尝试将插值函数与 C GSL 集成

c - 卡在 c 程序中如何在进程中间停止 scanf