我被要求以适当的术语提供以下算法的渐近空间和时间复杂度,以获得任意长度的初始输入数(与常数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]
,但我如何确定空间复杂度?
答案 0 :(得分:2)
通常,要测量空间复杂度,您需要查看需要多少额外空间来保存执行代码所需的所有信息。挑战在于,您通常可以在代码执行的整个生命周期中重用空间。
在这种情况下,代码需要额外的空间来存储
其中最后两个占用O(1)空间,因为只有一个i和辅助数据的常量空间,如堆栈指针等。那么第一个呢?好吧,循环的每次迭代都需要O(1)空间用于临时变量,但请注意这个空间可以重用,因为在每次循环迭代完成后,不再需要那些临时空间,并且可以重用下一次迭代。因此,所需的总空间只是O(1)。
(注意......你确定时间复杂度为O(n)?请注意,无论数组有多大,迭代次数都是常数。)
希望这有帮助!