【发布时间】:2021-09-16 09:42:01
【问题描述】:
我有一个非常简单的问题,我有这个循环:
for (int i=0; i<n; i++) {
"some O(n) stuff here)"
}
这个算法的最佳时间复杂度是多少? O(n)? (for 循环 O(1) * O(n) 东西) 或者 O(n^2)? (for 循环 O(n) * O(n) 循环内的东西)时间> for 循环本身是否会像往常一样被视为 O(n),还是会被视为 O(1) 因为它只会在最好的情况下进行 1 次循环?
【问题讨论】:
-
" 对于最好的情况,它只会产生 1 个循环?"假设 n = 5,那么只有 1 次迭代怎么会有“最佳情况”?
-
@jarod42 所以 O(n^2) 是三者中最好、平均和最坏情况的时间复杂度?
-
@ViliusBaranauskas 就大 O 而言,是的,即使您可以在循环内执行 O(k) 工作,它仍然是 O(n*k),或更一般的 O(n^2) , 总是。唯一重要的是功能增长,这就是我们在这里分析的内容。我们对实际值不感兴趣,例如 n = 5, k = 9。这样的性能影响可以忽略不计,也不重要,编译器可能只是展开它并给我们留下一个,从技术上讲,O(1),我不确定这是否正确,因为这不是大 O 的意思。
标签: time-complexity computer-science