【问题标题】:Big-O notation representation of a simple algorithm简单算法的大 O 表示法表示
【发布时间】:2013-11-25 19:18:53
【问题描述】:
如何用 Big-O 表示法表示其复杂性?我有点困惑,因为第二个 for 循环根据外部循环的索引而变化。还是 O(n^2) 吗?还是不那么复杂?提前致谢
for (int k = 0; k<arr.length; k++){
for (m = k; m<arr.length; m++){
//do something
}
}
【问题讨论】:
标签:
algorithm
big-o
computer-science
【解决方案1】:
您的估计来自progression 公式:
因此是O(n^2)。为什么你的案子是进展的?因为它是您循环的 n + (n-1) + ... + 1 总和。
【解决方案2】:
如果将第二个循环的所有迭代相加,则得到 1+2+3+...+n,它等于 n(n+1)/2(n 是数组长度)。即 n^2/2 + n/2。您可能已经知道,大哦记法中的相关项是最大幂的一个,而系数不相关。所以,你的复杂度仍然是 O(n^2)。
【解决方案3】:
运行时是 n^2 循环的 cca 一半
- 但在大 O 表示法中它仍然是 O(n^2)
- 因为任何恒定的时间/周期 - 操作都表示为 O(1)
- 所以 O((n^2)/2) -> O((n^2)/c) -> O(n^2)
- 非正式地有很多人使用 O((n^2)/2) 包括我自己的目的(它更直观和可比较)...更接近循环/运行时
希望对你有帮助