优雅的洗牌算法Knuth Shuffle

优雅的洗牌算法Knuth Shuffle

 次点击
1 分钟阅读

2025年5月8日

怎么做到随机?

给你一个数组,请你写个函数,随机打乱它的顺序,要求每一种排列出现的概率相同。

随机选择两个位置,交换它们的位置能做到真正的随机吗?

Knuth Shuffle(也被称为 Fisher–Yates Shuffle)是这样实现的

import random
def knuth_shuffle(arr):
    for i in range(n - 1, 0, -1):
          j = random.randint(0, i)
          arr[i], arr[j] = arr[j], arr[i]

在这个算法中将每一个位置的数据考虑到了,使用random随机生成前面位置的下标,将当前数据与其交换,从而实现了公平的洗牌算法。

Python中有很多针对不同场景的洗牌方法,比如Python内置函数random的shuffle,支持多维数组的numpy的shuffle方法,以及数据分析和科学计算常用的pandas的sample方法

© 本文著作权归作者所有,未经许可不得转载使用。