Python EPI 5.10空间复杂性分析

Python EPI 5.10空间复杂性分析,python,algorithm,Python,Algorithm,我正在编写一个函数,它接受一个置换(例如[2,0,1,3]和一个数组来应用置换(例如['a','b','c','d'])。使用上述两个输入,输出将是['b','c','a','d'] 下面的解决方案直接来自这本书,声称是O(1)空间 然而,这不是一句话: perm[:] = [a + len(perm) for a in perm] 通过列表理解创建一个全新的数组,然后将其分配给perm?在这种情况下,实际上是O(N)空间 另外,将新创建的列表分配给perm[:]而不是perm=…,会有什么附

我正在编写一个函数,它接受一个置换(例如
[2,0,1,3]
和一个数组来应用置换(例如
['a','b','c','d']
)。使用上述两个输入,输出将是
['b','c','a','d']

下面的解决方案直接来自这本书,声称是O(1)空间

然而,这不是一句话:

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


另外,将新创建的列表分配给
perm[:]
而不是
perm=…
,会有什么附加值?

perm[:]=…
不会创建新列表,而是对旧列表进行修改。(更节省内存)从内存效率的角度来看,您还应该将列表理解更改为生成器理解。此外,您的示例输出是错误的还是我遗漏了什么?它应该是
['c','a','b','d']
@MegaIng因为
c
映射到置换数组中的索引
1
,在函数的输出中,它应该放在索引1处。如果问题不清楚,很乐意编辑。另外,我知道您可以分配给perm[:]不要使用额外的空间——我是说通过列表理解创建一个列表,然后用它来写perm。这不是在内存中创建一个全新的列表吗,使用O(N)?@MegaIng如果要使用生成器函数来写perm,例如
perm[:]=generator_exp()
,那么就是O(1)空格正确吗?但在这种情况下,使用列表理解是O(N)?@Sunny看看他们的网站,他们似乎真正明白了一个事实,那就是你需要确保获得他们书籍的最新版本。这意味着他们可能知道其中一些错误并已修复。但你可能认为他们的网站上会有一个突出的勘误表部分,但我能找到的只是一份错误报告表……无论如何,我是uppose如果你知道足够多的错误,那么这对你来说可能比他们预期的更有用。:)
perm[:] = [a + len(perm) for a in perm]