我在Python中有一个集合,我想从中抽取一个元素,就像random.sample()方法一样。问题是sample()在内部将set转换为元组,这是O(n),我必须以最优的方式完成它。
是否有一个函数可以用来从具有时间复杂度O(1)的集合中对元素进行采样,或者唯一的方法是创建自己的set实现?
因为数据布局是不规则的,所以不可能在O(1)中从基于散列的set
中均匀地采样,除了在ω(n)查询的情况下,通过将其预处理成某种数组。 (当然,在构建set
时可以维持这样的数组,但这不是给定的起点,并且加载速度不比tuple
转换快。)