是否可以在O(M)时间内从大小为N的数组中选择M个唯一的均匀随机元素?
O(N)溶液显然是微不足道的,例如。 Fisher-Yates是一个大小为N的数组,截断为前M个元素。
答案 0 :(得分:1)
为[n-m,n]中的每个x选择[0,x]中的随机数。对于每个随机数,将该索引处的项目与上限索引处的项目交换。类似的东西:
import random
def random_elements(items, count):
length = len(items)
for i in range(count):
index = random.randrange(0, length - i)
yield items[index]
items[length - i - 1], items[index] = items[index], items[length - i - 1]