EPI 5.10空间复杂性认证

时间:2018-05-09 14:47:44

标签: python algorithm

我正在编写一个带有排列的函数(例如[2,0,1,3]和一个数组来应用置换(例如['a','b','c','d'])。使用上面两个输入,输出将是{ {1}}

以下解决方案直接来自本书并声称是O(1)空间。

['b','c','a','d']

然而,不是行:

def apply_permutation(perm, A):
    for i in range(len(A)):
        next = i 
        while perm[next] >= 0:
            A[i], A[perm[next]] = A[perm[next]], A[i]
            temp = perm[next]
            perm[next] -= len(perm)
            next = temp 
    perm[:] = [a + len(perm) for a in perm]
    return A

通过列表理解创建一个全新的数组,然后将其分配给perm[:] = [a + len(perm) for a in perm] ?在哪种情况下实际上是O(N)空间?

此外,将新创建的列表分配给perm而不是perm[:]会增加什么值?

0 个答案:

没有答案