求一个摇奖的算法或者思路

lodachi 2012-08-30 04:10:25
要在1000W个手机号中 抽取一个手机号码(假设手机号码是唯一的) 奖金是很丰富的 需要公证处公证的

界面上显示姓名和手机号码,以及两个按钮:开始、停止,点击开始后,姓名和手机号不断滚动,点停止,则确定中奖用户。




打算用BS架构做,手机号在数据库存着,实在没有思路。。
数据量小的话可以把数据都取出来,在js里循环,但是数据量太大了。。

怎么做呢,必须是公平的,每个手机号中奖的几率是平等的。。

单纯从这些数据中抽取一条是比较简单的,概率也是均等的,但是加上界面上的展示。。除非滚动速度足够快,机会才是均等的吧。。


求大神们帮帮忙
...全文
169 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这个我觉得可行。但是公证处公证的时候 能通过吗 至少在界面上有点假。。
[/Quote]
这个没啥问题。
你注意控制好重复提交之类的问题,比如别不小心双击了结果抽出两个特等奖,
或者重复抽中同一个人之类的这种问题就行了。


[Quote=引用 6 楼 的回复:]
另外求教一下 在数据库随机取一条 怎么写这个sql?
[/Quote]
什么数据库?比如 SQL Server
Select Top 1 phone
From 表
Order By rand()

主要计算量在排序,1000W个号码,可能还真得花点时间。


如果要预处理然后抽奖时能快速搞定的话,你就这样做:
建议提前准备好每个 phone 的"奖票" rand() 值,比如:
Update 表 Set ticket = rand()
注意对ticket这个字段做好索引!

抽奖时就很方便啦:
Select Top 1 phone
From 表
Where ticket >= rand()
不过要做个以防万一的纠错机制,如果Select出空记录,就重新执行一次这句话,
不过发生概率确实是非常非常低。
brightyq 2012-08-30
  • 打赏
  • 举报
回复
这个需要公证处公证,本身就假。
程序实现的,如何公证?公证的话也要看一下代码实现吧。不然怎么知道代码有没有假呢?

所以你说的公证处公证我觉得也只是公证抽奖过程中的操作符合规范而己。
lodachi 2012-08-30
  • 打赏
  • 举报
回复
另外求教一下 在数据库随机取一条 怎么写这个sql?
iamzep 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

建议不要把界面显示跟抽奖这个动作合并考虑。

界面显示只是为了炫和酷,准备好 1W 条数据,拼命闪就是了,鬼看得清;明白人都清楚。

抽的那一下,才去真的随机取一条出来。

所以不要把两者混为一谈。
[/Quote]
不如更取巧一点 就做一个滚动的界面 然后呢 取数字呢仅仅是简单的1--1000W随机取数 然后取到的数字呢 再去数据库调具体信息
lodachi 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

建议不要把界面显示跟抽奖这个动作合并考虑。

界面显示只是为了炫和酷,准备好 1W 条数据,拼命闪就是了,鬼看得清;明白人都清楚。

抽的那一下,才去真的随机取一条出来。

所以不要把两者混为一谈。


这个方法更讨巧~~ 赞。
按确定那下真正随即一下,就把最后抽那下随即1000W条会有点时间。
比如:7秒。 那么效果看上去不好吧?

在……
[/Quote]

这个我觉得可行。但是公证处公证的时候 能通过吗 至少在界面上有点假。。
scbb 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

建议不要把界面显示跟抽奖这个动作合并考虑。

界面显示只是为了炫和酷,准备好 1W 条数据,拼命闪就是了,鬼看得清;明白人都清楚。

抽的那一下,才去真的随机取一条出来。

所以不要把两者混为一谈。
[/Quote]

这个方法更讨巧~~ 赞。
按确定那下真正随即一下,就把最后抽那下随即1000W条会有点时间。
比如:7秒。 那么效果看上去不好吧?

在你的基础上稍微改动下,要是做得效果好点就这样。
1)取1W条,随便滚动。
2)按下【确定】时,1000W里随机去取最终号码。
同时滚动不要停,只是减慢速度。
3)把1)取到的号码慢慢滚上来,然后停住。
MiceRice 2012-08-30
  • 打赏
  • 举报
回复
建议不要把界面显示跟抽奖这个动作合并考虑。

界面显示只是为了炫和酷,准备好 1W 条数据,拼命闪就是了,鬼看得清;明白人都清楚。

抽的那一下,才去真的随机取一条出来。

所以不要把两者混为一谈。
scbb 2012-08-30
  • 打赏
  • 举报
回复
貌似难点在数据量大吧。

但是自己索引还不如用数据库呢,random 排序取第一个,然后返回。
不知道数据库1000w的量要多久。

要是取巧点,其实你抽奖这个动作要多久呢?
假设1分钟,你算下滚动速度,其实1分钟比如只能滚动1000条的话。
你就第一次乱序取1000条。 然后在前端滚动这1000条。

从概率上说,大概有点不一样吧。 但是我觉得这个是公平的吧?

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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