Time complexity 为什么下面代码段的时间复杂度为O(n),而空间复杂度为O(1)

Time complexity 为什么下面代码段的时间复杂度为O(n),而空间复杂度为O(1),time-complexity,space-complexity,Time Complexity,Space Complexity,下面给出的代码的空间复杂度为O1。我知道这与调用堆栈有关,但我无法正确地将其可视化。如果有人能让我更清楚一点,那就太好了 int pairSumSequenceint n{ 整数和=0; 对于int i=0;i

下面给出的代码的空间复杂度为O1。我知道这与调用堆栈有关,但我无法正确地将其可视化。如果有人能让我更清楚一点,那就太好了

int pairSumSequenceint n{ 整数和=0; 对于int i=0;i 如果它是常数,那么它是O1

相对于n的值,它将执行多少条指令? 让我们首先简化代码,然后逐行分析它

int pairSumSequenceint n{ 整数和=0; 对于int i=0;i 整数和=0; 类似地,返回一个值需要固定的时间,所以它也是O1

回报金额; 最后,让我们分析以下方面的内部:

总和+=2*i+l; 这也是常数时间,因为它基本上是一个乘法和两个和。又是O1。 但这个O1在a中被称为:

对于int i=0;i C=O1+n*O1+O1=On

这意味着该函数将花费与n值成比例的时间。

相对于n值,它需要多少空间? 唯一使用的变量是sum。 求和与n无关,所以它是常数

如果它是常数,那么它是O1

相对于n的值,它将执行多少条指令? 让我们首先简化代码,然后逐行分析它

int pairSumSequenceint n{ 整数和=0; 对于int i=0;i 整数和=0; 类似地,返回一个值需要固定的时间,所以它也是O1

回报金额; 最后,让我们分析以下方面的内部:

总和+=2*i+l; 这也是常数时间,因为它基本上是一个乘法和两个和。又是O1。 但这个O1在a中被称为:

对于int i=0;i C=O1+n*O1+O1=On


这意味着该函数的时间与n的值成比例。

时间/空间复杂度O1表示一个常数复杂度,常数不一定是1,它可以是任意数,但它必须是常数且不依赖于n。例如,如果你总是有1000个独立于n的变量,它仍然会给你O1。有时,它甚至可能发生,常数将是如此之大,相比你的n,On将是比O1更好的常数


现在在你的例子中,你的时间复杂度是开的,因为你进入循环n次,每个循环都有恒定的时间复杂度,所以它与你的n线性相关。然而,你的空间复杂度与n无关。你总是保持相同数量的变量,并且是常数,因此它将是O1。时间/空间复杂度O1意味着常数复杂度,常数不一定是1,它可以是任意数,但它必须是常数,不依赖于n。例如,如果你总是有1000个独立于n的变量,它仍然会给你O1。有时,它甚至可能发生,常数将是如此之大,相比你的n,On将是比O1更好的常数


现在在你的例子中,你的时间复杂度是开的,因为你进入循环n次,每个循环都有恒定的时间复杂度,所以它与你的n线性相关。然而,你的空间复杂度与n无关,你总是保持相同数量的变量,并且是常数,因此它将是O1

太棒了!谢谢,我明白了:太好了!谢谢,我明白了: