n 的求和与同级数的折叠版本的复杂性是多少?

问题描述 投票:0回答:1

所以 n 到 k 的求和可以编码为

总计 = 0 对于范围内的我(0,k): 总计 += 我 返回总计

但这也可以简化为

返回 (k*(k+1))/2

但这真的是一种计算总和的更快方法,还是计算机只是在幕后做同样的事情?

我用 C++ 计时,但我宁愿得到一个更理论化的答案

complexity-theory theory
1个回答
0
投票

是的,与执行 for 循环相比,运行系列的折叠版本要快得多。这有很多原因,但特别是,通过循环计算一个系列的总和的时间复杂度是 O(n),因为我们需要迭代地添加系列的每个元素。

另一方面,使用求和公式给我们一个常数时间复杂度(即 O(1))。想象一下,给定一个从 1 到 100 万的序列,需要计算其总和,它需要在循环内执行 100 万 * 次操作。在这种情况下,增量 (+=) 运算符需要

load the value
increment it by i
store the value in the variable

每次我们进行迭代。另一方面,折叠版本始终以相同的时间复杂度执行,无论您计算的是 10 个元素还是 100 亿个元素长的序列,公式都会执行一次。它是恒定的,因此是“恒定时间”。

© www.soinside.com 2019 - 2024. All rights reserved.