【算法】随机算法和双随机的实现思路

简介: 前言在产品需求中,比如抽奖,配对,会用到随机的概念 ,对应到功能实现中,也就是对应的随机算法。单随机需求比如做一个简单的抽奖轮盘,每次抽奖,随机出一个结果,由前端展示抽奖结果。

前言

在产品需求中,比如抽奖,配对,会用到随机的概念 ,对应到功能实现中,也就是对应的随机算法。

单随机

需求

比如做一个简单的抽奖轮盘,每次抽奖,随机出一个结果,由前端展示抽奖结果。

每个奖项都有对应的中奖概率,比如

一等奖 1% 1名
二等奖 10% 3名
三等奖 50 % 5名
参与奖 剩余情况 若干名

因为针对的是每次中奖的概率,所以所有的选项加在一起并不等于1.

思路

最低中奖概率为1%,那么如果我们把抽奖的种子范围设置成1-100,也就是说,当随机到的值为1的时候,才会中一等奖,当然,我更倾向于扩大10倍,把随机范围设置成1-1000.

具体的实现思路如下:

Created with Raphaël 2.1.0Start在范围内生成随机数落在对应的奖项上还有对应中奖名额?分配奖项End分配到下一级奖项yesno

双随机

和上面的随机不一样的是,双随机会随机生成一个随机池,保证每次取到的值的随机性。

具体步骤如下

1.生成一个数组,元素从1 到1000,总共1000个元素
2.打乱数组
3.随机生成一个值,作为数组的key进行取值
4.取到的值为本次随机产生的随机数

这样随机能双层保证随机,比单随机更好进行控制

总结

由于每个产品的需求不同,最终的实现代码总会有差别,但是基础的随机算法还是一样的。

第一次使用markdown做流程图呢,感觉不错~

目录
相关文章
|
8月前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
算法:贪心算法的原理和基本思路
算法:贪心算法的原理和基本思路
|
7月前
|
人工智能 C++
组合+排列 以及伯努利装错信封问题思路
这段代码是C++实现的一个程序,用于计算从`n`个不同元素中选择`m`个进行排列的组合总数(排列问题)。用户输入`n`和`m`,程序通过循环和条件判断生成所有可能的排列,并输出排列的总数。核心逻辑是使用回溯法,当找到一个满足条件(不包含重复元素)的排列时,更新计数器并继续寻找下一个排列。
54 0
|
8月前
|
存储 算法
算法思想总结:模拟算法
算法思想总结:模拟算法
|
8月前
|
人工智能 算法 BI
【树】【因子数】【数论】【深度优先搜索】2440. 创建价值相同的连通块
【树】【因子数】【数论】【深度优先搜索】2440. 创建价值相同的连通块
|
机器学习/深度学习 算法 测试技术
C++算法:有向图计数优化版原理及实现
C++算法:有向图计数优化版原理及实现
|
算法 编译器 应用服务中间件
加权随机设计与实现
加权随机,是指当我们从某种容器中随机选择一个元素,每个元素被选中的机会并不相等,而是由相对“权重”(或概率)被选中的,也就是说我们想要有“偏心”的得到某种随机结果。
78918 1
加权随机设计与实现
|
机器学习/深度学习 存储 API
【刷穿 LeetCode】528. 按权重随机选择 :「前缀和 + 二分」&「模拟(桶轮询)」
【刷穿 LeetCode】528. 按权重随机选择 :「前缀和 + 二分」&「模拟(桶轮询)」
【刷穿 LeetCode】1221. 分割平衡字符串 : 归纳法证明从「最小分割点」进行分割可以得到最优解
【刷穿 LeetCode】1221. 分割平衡字符串 : 归纳法证明从「最小分割点」进行分割可以得到最优解
|
人工智能 算法 搜索推荐
算法基础 | 常用排序算法小结(一)
算法基础 | 常用排序算法小结
127 0
算法基础 | 常用排序算法小结(一)