【发布时间】:2020-12-04 11:17:47
【问题描述】:
下面的 Python 代码创建了一个(n 个已初始化的)n 个非负整数列表,每个非负整数最多为 n-1:
a = [0] * n
我假设由于初始化,该指令需要 O(n) 时间。 Python中有没有办法在O(1)时间内获得n个整数列表?我不在乎列表是否已初始化。我只希望时间复杂度为 O(1)。我还希望列表可变并支持 O(1) 时间访问和更新 i-th 条目。这可以通过malloc 在 C 中轻松完成。 Python 怎么样?
【问题讨论】:
-
“这可以通过 malloc 在 C 中轻松完成”绝对不是。 Malloc 不初始化任何东西。 c 中的 malloc 分配空间,但分配的内存未初始化。这意味着如果你在调用 malloc 之后读取一个分配的内存值,你将得到一个不确定的结果。 See also here 我的意思是你在比较两个不同的东西。你不能说 malloc 在 0(1) 中初始化
-
@joostblack,感谢您的指点。但是,建议的虚拟列表不是我想要的。例如,似乎很难保持 python 列表在 O(1) 时间内获取/设置虚拟列表的第 i 个条目的优势。
-
@juanpa.arrivillaga,信不信由你,这就是我想做的事情......我有我自己的理由。我同意 Python 可能是一种错误的语言。但是,不知怎的,我别无选择……
-
@juanpa.arrivillaga,感谢您的理解。一个简单的回答说这在 Python 中是不可能的,实际上也很好。
-
Python/C memory management documentation 可能包含一些有用的信息