什么是空间复杂度?

时间:2019-05-24 03:06:50

标签: python space-complexity

我不确定以下函数的空间复杂度是多少?是O(n)还是O(1)

# Do rotation
def foo(arr):
    arr[:] = arr[5:] + arr[:5]

2 个答案:

答案 0 :(得分:3)

arr[5:]arr[:5]中的每一个都会建立一个新列表,然后再加入另一个新列表,这些新列表就地分配给arrarr[5:]和连接列表都要求空间复杂度为 O(n),因此总体空间复杂度为 O(n)

答案 1 :(得分:1)

这取决于arr的类型,但是假设它是list,则为O(n),因为RHS上的两个片都创建了新的list对象,尽管是暂时的。将这两个连接成一个第三个新列表,然后将其元素复制到arr引用的现有列表中。

您可以通过使用itertool.slice避免进行复制来实现O(1)空间复杂度:

def foo(arr):
    arr[:] = chain(islice(arr, 5, None), islice(arr, 5))
相关问题