【发布时间】:2022-10-25 19:05:53
【问题描述】:
在我们的 CS 课程中,我们没有介绍如何分析空间复杂度。不过,我们已经被赋予了实现一个 $\Theta(n)-time$ 算法来反转单链表的任务,最大 $O(1)-space$(除了实际数组)。
这是我在 Python 中的实现:
#x0.next = x1
def invert(x0,x1):
next = x1.next
x1.next = x0
if next is None:
return x1
else:
invert(x1,next)
def invertSLinkyList(head):
firstNext = head.next
head.next = None
x = 0
x = invert(head,firstNext)
return x
给出一个快速的口头描述:本质上,我们遍历每个节点 (x0) 并将其下一个 (x1) 设置为前一个节点。然后我们在原始的 next (x1) 上递归地调用它它的next (x1.next),直到我们到达结束节点(next = None),在这种情况下,我们将此节点作为新的头返回。
我根据以下内容分析了它的时间复杂度为 $\Theta(n)$:
- 每次调用都会在固定时间创建 1 个子注释
- 当代码遍历整个列表时,我们创建了 n 个孩子。
- “合并”需要 $O(1)$
我的问题是;我该如何分析它的空间复杂度?
OBS:请注意这不是一个评分作业。这是我每周训练的一部分。
【问题讨论】: