已整理了一个中奖概率算法,请问是否有更好的?

findshine 2016-05-15 02:55:47
设置中奖概率
1等奖千分之1;
2等奖千分之10;
3等奖千分之50;

为了保证各个奖项的真实性,我的算法是想在表中生成1000条数据,其中标记1等奖的1条,标记2等奖的10条,标记3等奖的50条,其余的900多条都为未中奖。

然后前段从后端取得时候通过(mysql数据库)SELECT * FROM tablename ORDER BY RAND() LIMIT 1 随机读取一条然后删掉,这样直至为空。当检测为空的时候在按照如上概率生成1000条 如此循环。

请问这样的算法是否可行 是否有更好的算法?
...全文
844 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
QZC78 2016-05-16
  • 打赏
  • 举报
回复
个人可以觉得可以给奖项设置权重以及中奖数量,然后根据所有奖项设置的权重计算出最小公倍数,然后分别以最小公倍数除以权重获取各个奖项的中奖区间标识,然后分别叠加计算出各个奖项的区间范围,再在最小公倍数范围内随机获取一整数,落在区间内即为中奖,反之不中奖。中奖数量可以load中奖记录统计进行相关设置拦截。 计算各奖项区间标识:一等奖=最小公倍数/一等奖权重 二等奖=一等奖+(最小公倍数/二等奖权重) 三等奖=二等奖+(最小公倍数/三等奖权重) 比如:一等奖权重 300 二等奖权重 200 三等奖权重100,那么最小公倍数为600。那么600分别除以各自权重。 根据上述公式分别得出:&一等奖:2 二等奖 :5 三等奖:11; 得出 各中奖区间为: 一等奖(0~1) 二等奖(2~4) 三等奖(5~10)
findshine 2016-05-15
  • 打赏
  • 举报
回复
有人么有人么
qq_26154489 2016-05-15
  • 打赏
  • 举报
回复
我觉得实际生产中可能还要时间的因素,一段时间内数据库拥有的奖项的数量是一定的,否则一段用户基数很大的话,这一定时间内产生的奖数量会很多。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧