【发布时间】:2021-01-06 07:00:43
【问题描述】:
假设我有 2 个嵌套的 for 循环和 1 个大小为 N 的数组,如下面的代码所示:
int result = 0;
for( int i = 0; i < N ; i++)
{
for( int j = i; j < N ; j++)
{
result = array[i] + array[j]; // just some funny operation
}
}
这里有两种情况:
(1) 如果严格的约束是 N >= 1,000,000,那么我们可以肯定地说时间复杂度是 O(N^2)。众所周知,这是真的。
(2) 现在,如果严格的约束条件是 N 用现代计算机运行和完成这 2 个循环的时间很少?听起来对吗?
请告诉我 N 的值是否在决定时间复杂度 O(N) 的结果中起作用?如果是,那么 N 值需要多大才能发挥该作用(1,000 ? 5,000 ? 20,000 ? 500,000 ?)换句话说,这里的一般经验法则是什么?
有趣的理论问题: 如果 15 年后,计算机速度如此之快,即使 N = 25,000,000,这 2 个 for 循环也可以在 1 秒内完成。那时,我们可以说即使 N = 25,000,000 时间复杂度也是 O(1) 吗?我想当时的答案是YES。你同意吗?
【问题讨论】:
-
Big-O 是关于渐近复杂性的。将它用于有界变量是没有意义的,尤其是当边界非常小时。
标签: performance optimization time computer-science