Fisher-Yates Shuffle Algorithm

本文介绍了Fisher-Yates Shuffle Algorithm,该算法保证数组洗牌后元素出现在任何位置的概率相等,拥有O(n)的时间复杂度。通过从最后一个元素开始,随机与其前面的元素交换,递减指针直至完成洗牌。
摘要由CSDN通过智能技术生成

今天我们介绍一种 Shuffle算法,它保证了对数组shuffle后,任何一个元素出现在数组中任何一个位置的概率是相等的。并且这个算法复杂度为 O(n)

算法以及实现

对于一个需要 Shuffle的数组 A,其长度为 n。
假设我们有这样的一个函数 rand(0, n),它可以均匀地生成 [0,…,n]之间的随机整数。
Fisher-Yates Shuffle Algorithm 这样给出解决方案:

  1. Let k = n-1, (A is 0-indexed)
  2. start from node k, swap it with a randomly selected element from the array of first k elements
  3. decrease k by one
  4. Repeat 1, 2 until k hits 0
import random
import math
def shuffle(A):
	for i in range(len(A)-1, 0, -1):
		j = math.floor(random.random() * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值