循环遍历数组的此算法的空间复杂性

时间:2013-09-15 04:56:39

标签: algorithm complexity-theory big-o space-complexity

我被要求以适当的术语提供以下算法的渐近空间和时间复杂度,以获得任意长度的初始输入数(与常数12位不同)。

1 for i = 2 to 12
2     if d[i] == d[i-1]
3        d[i] = (d[i] + 3) mod 10

此算法适用于包含12位数的数字,每个数字都存储在数组d[]中(因此我们有d[1]d[2],... {{1} })

我发现时间复杂度为d[12],但我如何确定空间复杂度?

1 个答案:

答案 0 :(得分:2)

通常,要测量空间复杂度,您需要查看需要多少额外空间来保存执行代码所需的所有信息。挑战在于,您通常可以在代码执行的整个生命周期中重用空间。

在这种情况下,代码需要额外的空间来存储

  • 循环中临时计算的值
  • i和
  • 的值
  • 杂项数据,如程序计数器等。

其中最后两个占用O(1)空间,因为只有一个i和辅助数据的常量空间,如堆​​栈指针等。那么第一个呢?好吧,循环的每次迭代都需要O(1)空间用于临时变量,但请注意这个空间可以重用,因为在每次循环迭代完成后,不再需要那些临时空间,并且可以重用下一次迭代。因此,所需的总空间只是O(1)。

(注意......你确定时间复杂度为O(n)?请注意,无论数组有多大,迭代次数都是常数。)

希望这有帮助!