洗牌算法具体指的是什么

1.背景介绍
洗牌算法具体指的是什么?

从字面意义上讲,就是实现洗牌的具体方法, 洗牌的目的是什么呢?在不考虑出老千的情况下,洗过的牌要足够乱才好,牌面随机分布,越乱越好! 在科研,计算机科学等很多领域都需要运用到概率分布的随机性, 所以说洗牌算法本质上是把一个给定元素集合打乱成为一个无序元素集合

2.知识剖析

最经典的 FISHER-YATES 的洗牌算法

其算法思想就是 从原始数组中随机抽取一个新的元素到新数组中 
1、从还没处理的数组(假如还剩n个)中,产生一个[0, n]之间的随机数 random 
2、从剩下的n个元素中把第 random 个元素取出到新数组中 
3、删除原数组第random个元素 
4、重复第 2 3 步直到所有元素取完 
5、最终返回一个新的打乱的数组

let arr = [1,2,3,4,5,6,7,8,9,10]

function shuffle(arr){

let result = [],

random;

while(arr.length>0){

random = Math.floor(Math.random() * arr.length);

result.push(arr[random])

arr.splice(random, 1)

}

return result;

}

KNUTH SHUFFLE

每次从未处理的数组中随机取一个元素,然后把该元素放到数组的尾部,即数组的尾部放的就是已经处理过的元素,这是一种原地打乱的算法,每个元素随机概率也相等

1、选取数组(长度n)中最后一个元素(arr[length-1]),将其与n个元素中的任意一个交换&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值