【发布时间】:2014-06-03 16:36:15
【问题描述】:
这是我提出的算法的一部分:
for (int i = 0; i < n - 1; i++)
for (int j = i; j < n; j++)
(...)
我正在使用这个“双循环”来测试一个大小为 n 的数组中所有可能的 2 元素和。
显然(我不得不同意),这个“双循环”是O(n²):
n + (n-1) + (n-2) + ... + 1 = sum from 1 to n = (n (n - 1))/2
这是我困惑的地方:
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
(...)
第二个“双循环”的复杂度也为O(n²),显然(在最坏的情况下)它比第一个好很多(?)。
我错过了什么?信息准确吗?有人能解释一下这个“现象”吗?
【问题讨论】: