评论

抽奖小程序抽奖算法的实现,附赠算法库

简易思路如下: 1、获取参与抽奖的人员列表,组合为数组 2、使用数组乱序算法,将抽奖列表大乱 3、根据一定规则取出打乱后的数组中的抽奖人员,这些就是中奖人员了

简易思路如下:

1、获取参与抽奖的人员列表,组合为数组

2、使用数组乱序算法,将抽奖列表大乱

3、根据一定规则取出打乱后的数组中的抽奖人员,这些就是中奖人员了


乱序算法思路具体如下,使用Fisher–Yates 洗牌算法:

Fisher–Yates 算法由Fisher和Yates这两个人的发明的,一开始只是用来人工混排(真实荷官,现场发牌……)一组数字序列,原始算法的步骤非常容易理解。

  1. 写下从 1 到 N 的数字(一副扑克)
  2. 取一个从 1 到剩下的数字(包括这个数字)的随机数 k——(从中间抽一沓,)
  3. 从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最前面一位
  4. 重复第 2 步,直到所有的数字都被取出
  5. 第 3 步写出的这个序列,现在就是原始数字的随机排列

说通俗点就是:

  1. 一副扑克
  2. 从中间随便取一沓(取的越少,越容易实现乱序,算法中只取一个)
  3. 把取出的牌放在旁边,堆成一堆
  4. 重复2、3步骤,直到手里没牌
  5. 第三步开始另外堆起来的牌,就足够乱了

算法库地址如下,需要自取:

https://www.npmjs.com/package/lodash

最后一次编辑于  2020-12-13  
点赞 0
收藏
评论
登录 后发表内容