从数组中挑选随机数

时间:2013-09-21 18:04:32

标签: algorithm sorting random complexity-theory permutation

是否可以在O(M)时间内从大小为N的数组中选择M个唯一的均匀随机元素?

O(N)溶液显然是微不足道的,例如。 Fisher-Yates是一个大小为N的数组,截断为前M个元素。

1 个答案:

答案 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]