美文网首页pythondocker
python-洗牌算法的实现

python-洗牌算法的实现

作者: mr_xm | 来源:发表于2018-01-22 19:51 被阅读0次

简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。
Fisher–Yates shuffle 的原始版本,最初描述在 1938 年的 Ronald Fisher(上图) 和 Frank Yates 写的书中,书名为《Statistical tables for biological, agricultural and medical research》。他们使用纸和笔去描述了这个算法,并使用了一个随机数表来提供随机数。它给出了 1 到 N 的数字的的随机排列,具体步骤如下:

写下从 1 到 N 的数字
取一个从 1 到剩下的数字(包括这个数字)的随机数 k
从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最后一位
重复第 2 步,直到所有的数字都被取出
第 3 步写出的这个序列,现在就是原始数字的随机排列
已经证明如果第 2 步取出的数字是真随机的,那么最后得到的排序一定也是。

这个是我自己根据Fisher–Yates shuffle 算法的python 实现

#/bin/env python
#-*- encoding=utf8 -*-
import random 

arr = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n"]

for i in range(1,len(arr) - 1):
        ran = random.randint(0,i)
        value = arr[ran]
        value_index = arr.index(value)
        arr.pop(value_index)
        arr.append(value)
    
print arr

当然最简单的random模块已经有方法实现,直接调用即可

random.shuffle(list)

相关文章

  • python-洗牌算法的实现

    简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排...

  • 实现洗牌算法

    洗牌算法 Fisher–Yates随机置乱算法也被称做高纳德置乱算法,通俗说就是生成一个有限集合的随机排列。Fis...

  • 洗牌算法

    音乐软件中的随机播放算法是怎样实现的? 洗牌算法(Shuffle) 生成一个随机数(Random) 这里给出洗牌算...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

  • golang洗牌算法实现

    额,其实是个很简单的代码,只不过刚了解到,还是记录一下吧需要导入的包有两个,"math/rand"实现了洗牌算法的...

  • poker 洗牌算法

    扑克游戏中一种洗牌算法的实现:int count = 54;NSMutableArray pokeArray = ...

  • ABitchain项目周报 2018年02月12日

    核心开发工作: 1.主链开发: 1.1共识: 确立DPOS详细实现细节—100% 开发DPOS投票机制、洗牌算法、...

  • 洗牌算法

    一次偶然的机会,需要我生成一个长度为len的数组。数组的内容是[0-len)。这并不难,分分钟生成这样一个数组: ...

  • 洗牌算法

    在工作中需要重写一个洗牌算法,根据网络中的资料分析了一下,已经有总结得很好的了,就直接总结转载了一下。 洗牌算法大...

  • 洗牌算法

    洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列。

网友评论

    本文标题:python-洗牌算法的实现

    本文链接:https://www.haomeiwen.com/subject/wvqraxtx.html