【发布时间】:2012-03-04 09:42:32
【问题描述】:
我一直认为的复杂性:
1 + 2 + 3 + ... + n 是 O(n),将两个 n × n 矩阵相加将是 O(n^2)。
但今天我从一本教科书中读到,“根据前 n 个整数之和的公式,这是 n(n+1)/2”,然后是:(1/2)n^2 + (1 /2)n,因此 O(n^2)。
我在这里缺少什么?
【问题讨论】:
-
了解“this”是什么会有所帮助。你是对的,加起来 n 件事(做 n 次,每件事的成本 O(1))是 O(n)。但是,如果不是添加 1+2+3+ 等,您必须 do 一次,然后 do 两次,然后 3 次,等等,然后在 1 +2+3..+n 完成了,你已经完成了 n*(n+1)/2 件事,即 O(n^2)。
-
失踪?好吧,您找到了解释它的求和公式。您还需要什么帮助?
-
@DSM 抱歉含糊不清,“this”指的是
1 + 2 + 3 + ... + n -
@user1032613:所以要明确一点,“然后是这样”是您的亮点,而不是书中所说的?因为如果是这样,那么我认为下面的几个答案是正确的,并且您将通常对 n 数字求和的算法的复杂性与 它发生 我们可以计算总和这一事实混淆了1+2+..+n 使用公式。假设我们将 n 个平方相加,而不是 1+4+9+...n^2。它们的总和将是 (n)(n+1)(2n+1)/6,但这并不意味着将 n 个事物加在一起会变成 O(n^3);相反,这意味着在特殊情况下,我们可以在 O(1) 中得到它。
标签: performance algorithm optimization complexity-theory big-o