从具有O(1)时间复杂度的集合中抽取一个元素

问题描述 投票:1回答:1

我在Python中有一个集合,我想从中抽取一个元素,就像random.sample()方法一样。问题是sample()在内部将set转换为元组,这是O(n),我必须以最优的方式完成它。

是否有一个函数可以用来从具有时间复杂度O(1)的集合中对元素进行采样,或者唯一的方法是创建自己的set实现?

python set time-complexity sample
1个回答
1
投票

因为数据布局是不规则的,所以不可能在O(1)中从基于散列的set中均匀地采样,除了在ω(n)查询的情况下,通过将其预处理成某种数组。 (当然,在构建set时可以维持这样的数组,但这不是给定的起点,并且加载速度不比tuple转换快。)

© www.soinside.com 2019 - 2024. All rights reserved.