【发布时间】:2020-09-13 23:13:47
【问题描述】:
我想在 O(1) 时间内从 python 集合中选择一个随机元素(均匀分布)。这可能吗?我已经看到它建议首先将集合转换为列表,然后从列表中选择随机元素,但这将花费 O(n) 时间,其中 n 是集合的大小。如果这不可能,有什么比较快的替代方案?
【问题讨论】:
-
您可以使用字典并保持键和值相同,然后调用
random.choice。你的用例是什么——需要一套吗?据我所知,我认为没有办法比 O(n) 做得更好,但也许我错了,因为直觉上看起来应该没问题。 -
我认为你不能从 O(1) 的集合中随机选择。使用列表似乎是一种合理的方法。除非你的集合很大,否则这似乎不是问题。
-
Time complexity,来自 Python 维基
-
如果你真的需要一套数据结构,有许多第三方
orderedset实现可用——参见PyPi,应该可以从支持索引。另见Does Python have an ordered set? -
您是否尝试拥有一种数据结构来公开类似集合的操作以及
random()一种?
标签: python set time-complexity