“如何等概率地大小为n的数组中选取m个整数”(python)

题目描述:随机的从大小为n的数组中选取m个整数,要求每个元素被选中的概率相等。

分析与解答:首先从有N个元素的数组中随机选出一个元素,然后把这个选中的数字与数组中第一个元素交换,接着从数组后面N-1个数字中选出1个元素与数组中第二个元素交换,以此类推,直到选出m个数字为止,数组前m个数字就是随机选出来的m个数字,且他们被选中的概率相同。

import random


def getRandomM(a, n, m):
    if a == None or n <= 0 or n < m:
        print("参数不合理")
        return

    i = 0
    while i < m:
        j = random.randint(i, n - 1)  # 获取i到n-1间的随机树
        # 随机选出的元素放到数组的前面
        tmp = a[i]
        a[i] = a[j]
        a[j] = tmp
        i += 1


if __name__ == "__main__":
    a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    n = 10
    m = 6
    getRandomM(a, n, m)
    i = 0
    while i < m:
        print(a[i], end=" ")
        i += 1

猜你喜欢

转载自blog.csdn.net/qq_42013574/article/details/89103823