time-complexity - 为什么下面代码片段的时间复杂度是 O(n) 而空间复杂度是 O(1)
问题描述
下面给出的代码的空间复杂度为 O(1)。我知道它与调用堆栈有关,但我无法正确地可视化它。如果有人能让我更清楚地理解这一点,那就太好了。
int pairSumSequence(int n) {
int sum = 0;
for (int i = 0;i < n; i++) {
sum += pairSum(i, i + l);
}
return sum;
}
int pairSum(int a, int b) {
return a + b;
}
解决方案
相对于 的价值,它需要多少空间n
?
唯一使用的变量是sum
.
sum
关于 不会改变n
,因此它是恒定的。
如果它是恒定的,那么它是 O(1)
相对于 的值,它将执行多少条指令n
?
我们先简化代码,然后逐行分析。
int pairSumSequence(int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += 2 * i + l;
}
return sum;
}
变量的声明和初始化需要恒定的时间,并且不随n
. 因此这条线是O(1)。
int sum = 0;
同样返回一个值需要恒定的时间,所以它也是 O(1)
return sum;
最后我们来分析一下for的内部:
sum += 2 * i + l;
这也是常数时间,因为它基本上是一个乘法和两个和。再次O(1)。但是这个 O(1) 在 for 中被调用:
for (int i = 0; i < n; i++) {
sum += 2 * i + l;
}
此 for 循环将准确执行n
次数。因此,该函数的总复杂度为:
C = O(1) + n * O(1) + O(1) = O(n)
这意味着此函数将花费与的值成比例n
的时间。
推荐阅读
- php - Laravel SESSION DRIVER 文件和数据库
- python - 找到一些文件并在python中附加内容
- python - 试图从一个函数中取出一个变量以在另一个函数中使用
- typescript - vscode-test - 调用 runTests 时出错
- sql-server - 如何使您的数据水平
- python - 通过其他脚本启动时,Python 脚本不起作用
- javascript - 物体相互接触的奇怪渲染
- python - 如何使用 y-ticks(周一→周日)对 matplotlib 图的 y 轴进行排序,对过程中的数据进行排序?
- bash - 终端 Tab 键不会自动完成,而是尝试运行我的脚本
- python - openCV 中的 Mac aalart 弹出窗口