怎样的中奖算法能让人信服(转)
话说写一个抽奖程序还不容易,不就是生成一个随机数吗,哪需什么算法之类的。
从技术上说,这确实不难。事实上,你怎么写都可以,因为程序只运行在特定的设备上,外人根本无法了解其中的细节。
那么问题就来了,如何才能让大家相信你没有作弊?
你会说,我可以把程序开源,抽奖前大家监督运行。不过这样就一定可信了吗?
就算程序没问题,也不代表系统就是可靠的。或许你早已偷偷开了外挂,这样无论程序有多公正,结果仍躲不出魔掌。
那就退一步吧,每次开奖前重装一次系统。
不过,假设所有的软件都可信,但最终仍需通过硬件来执行。如果硬件底层就有猫腻,那就根本不可能发觉了。
就算硬件也没问题,最终结果还得展示给大家吧。如果显示器就是一个加了特技的道具,那么一切都白搭了。。。
没法玩了。抽奖本来就建立在信任的基础上,存心弄虚作假,那谁还玩的赢。
难道就没有一个能让大家信服的技术手段,来解决这个问题吗?
其实,大家质疑的并非是算法,而是运行环境。毕竟,虚拟世界里玄机太多了。
所以,我们必须放弃自己产生随机数的做法,而是从更客观的第三方获取。
宇宙
大自然变幻无常,充满各种随机性。
微观的世界更是扑朔迷离,要是使用量子的状态,来计算中奖号码,客观程度堪比宇宙真理了。
听起来似乎很理想,但如何才能获得这些数据?只能通过科学仪器来测量。
然而再精准的仪器,也得由人来控制。可惜我们不懂,只能让科学家们去操作。
这不,又涉及到人这个环节了。只要有好处,砖家想怎么说都可以,反正一般人也无从考证。
就如同观看宇宙节目,说星星有 10 颗亿还是 20 亿,有谁会在意?甚至再多报几个数量级,也少有人质疑。
这个领域的信息,对常人来说太遥远了。即使再客观,也难以让人信服。
因此,光有客观随机是远远不够的。要让大家能切身感受到的,才有说服力。
天气
这次,我们选择一个贴近生活的因素:天气。
虽然气候变化很有规律,但短时间里的气温,还是具有一定的不可预测性。那么就来尝试下,使用气温来作为中奖号码吧。
我们选择开奖当天,各大城市的最高气温,例如:
北京 12°C
,上海 17°C
,广州 24°C
,深圳 25°C
于是组合出一串数字:12172425
,作为开奖的结果。
当然你会说,这种组合也太少了吧。况且短时间内,气温也不会有很大的变化。如果事先将每个城市 ± n°C 的组合都买下,岂不是很容易中奖?
别急,这里只是个举个例子。事实上,我们得选择更多的城市,让组合呈指数增加。
如果换成 10 个城市,即使每个押上 ± 1°C,也有 3^10 = 59,049 种情况了。
如果有 20 个,就有 3^20 ≈ 35 亿的组合数!
不过问题又来了,中奖号码就那么几位,如何才能将这一大堆温度,转换成最终的号码?
显然,这时不能简单的依次排列了。我们必须做一定的舍取,让每个数据都能参与计算。例如将它们相乘:
12*17*24*...*30 = xxxxx
得到一个结果。不过这种计算方式也太弱了,要是一个城市温度升高,另一个降低,也许结果正好就抵消了。
所以,为了防止被预测,我们得让任何一个数据的细微变化,都能使得结果变得完全不同。
于是,经典的散列算法用在这里再好不过了吧。
我们照着天气预报的顺序,依次算出每个城市的气温散列值:
城市 | 气温 | 散列 (MD5) |
---|---|---|
北京 | 12 | 6fe97759aa27a0c9 |
哈尔滨 | 5 | bbce2345d7772b06 |
长春 | 7 | ceea167a5a36dedd |
沈阳 | 6 | 5a880faf6fb5e608 |
... | ... | ... |
澳门 | 26 | 3463d06de0ca9a15 |
最后,再整体来一次散列计算。将结果转成数字进行取模,即可得到最终的开奖号码了。
Hash(List) % N = xxxxxxx
不像宇宙那么神秘,天气可随时查询,而且人们能实时感受着。算法和数据都已公开,未来任何时刻都可以进行检验,显然具有足够的权威性。
不过尽管如此,现实中我们还是不会太在意精确度。有谁会为了 1°C 而亲自测量,况且,同个城市不同的时间和环境,仍有一些偏差。
如果彩票开奖用上天气数据的话,CCTV 最后一个可信节目也将面临消失吧:)
金融
思考下本质问题,抽奖目的是什么?不就是为了钱吗。
同样是钱,世界级的金融机构,显然有着更完善的体系,为何不采用它们的数据呢?
例如股票,有着方便快捷的查询途径。电脑、手机、报纸随时可查阅,信息渠道上的垄断几乎不存在。
当然,股票本身并不随机,其变化源于交易,因此可以人为操纵。
然而只要玩家足够多,世界各地的人们都在实时操作,于是就成了一个巨大的分式系统,整体就显得客观稳定了。
这时要想对整体进行操纵,就得有大量的经济基础为前提了。
以苹果为例,如今市值高达 7000 多亿美元,即使想撬动一个零头,也得花费千万级的成本。相比那点彩票奖金,简直小巫见大巫。
况且,世界上又不只有苹果一家。我们可以选择更多靠谱的股票,让最终组合变幻莫测。即使能够操纵一家,那也无法搞定所有的吧。
我们选定一个时间点,例如开奖当天的收盘价。同样的方式,将数据套入之前的天气算法里:
股票 | 收盘价 | 散列 |
---|---|---|
苹果 | 128.70 | 1ec5f9553dc8cd90 |
微软 | 48.24 | 8b731bc472c64a70 |
埃克森美孚 | 89.11 | 37f8d9a44f8fb8cd |
沃尔玛 | 78.82 | 11c966c5b6f63f93 |
.... | ... | ... |
最终得出一个类似的数值,作为中奖号码。
这样的算法是否足够随机,有待验证和改进。但其权威性是毋庸置疑的,这是基于全世界经济秩序的结果,能操纵这个级别的人,还会在乎那点彩票奖金吗?
天地人和
最后,要是觉得纯粹的股票数据还不够合理,那就不妨把天气因数也参与进来。
我们用天气对股票进行加盐,再进行散列计算:
股票 | 收盘价 | 气温 | 散列 |
---|---|---|---|
苹果 | 128.70 | 12 | 75bcf3f75e292857 |
微软 | 48.24 | 5 | 20fc6e9ef76b5aa7 |
埃克森美孚 | 89.11 | 7 | fabd0b330ca0eb45 |
沃尔玛 | 78.82 | 6 | c7d7d2e18f5698aa |
.... | ... | ... | ... |
result = Hash(List) % N
这样,只有同时掌控天时地利人和,才能预测到开奖结果。也许只有上帝才有这个能力吧。
http://www.cnblogs.com/index-html/p/trusted-lottery-algorithm.html
怎样的中奖算法能让人信服(转)相关推荐
- 怎样的中奖算法能让人信服
话说写一个抽奖程序还不容易,不就是生成一个随机数吗,哪需什么算法之类的. 从技术上说,这确实不难.事实上,你怎么写都可以,因为程序只运行在特定的设备上,外人根本无法了解其中的细节. 那么问题就来了,如 ...
- 微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服
微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服 2014/10/08 · Testin · 开发人员訪谈 2013年11月1日,谷歌运行董事长施密特(Eric Emerson Sch ...
- php写彩票中奖代码,php简单中奖算法(实例)
今天遇到这样的一个问题 封装一个 抽奖概率函数 思前想后去网上找点资料吧,而且不止一种方法 这种我感觉还是比较容易的 还是那句话 实现功能的思路不止一种 代码也不止一种. function get_ ...
- 微博达人硅谷之歌:Testin云测移动搜索性能测试很是让人信服
微博达人硅谷之歌:Testin云测移动搜索性能测试很是让人信服 2014/10/08 · Testin · 开发者访谈 2013年11月1日,谷歌执行董事长施密特(Eric Emerson Schmi ...
- 试题 算法训练 矮人采金子(python)
试题 算法训练 矮人采金子 提交此题 评测记录 资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 ...
- 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建
基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 文章目录 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 1. 传统推荐系统模型 2. 协同过滤算法 3. 基于双视角图表示学习算法的模 ...
- 用php制作中奖系统,php简单中奖算法(实例)
今天遇到这样的一个问题 封装一个 抽奖概率函数 思前想后去网上找点资料吧,而且不止一种方法 这种我感觉还是比较容易的 还是那句话 实现功能的思路不止一种 代码也不止一种. function get_ ...
- 漫画:呕心泣血算法指导篇(真正的干货,怒怼那些说算法没用的人)
今天是小浩算法"365刷题计划"第70.5天.我们暂停一天,我自己有个很喜欢的话,叫做 "练习 - 坚持 - 总结 - 提高",我们已经练习了 70 天,如果不 ...
- 方法论是大脑中内置的一级(元)算法,是人的核心思考结构和方式,是心智模型...
方法论是大脑中内置的核心算法: 是人类认识世界改造世界的元算法: 科学知识是人的大脑中的二级算法: 二级算法需要一级算法来控制.调度和监督: 有人读了很多书,变成了高手:更多人终日学习,却依旧平庸.为 ...
最新文章
- Java Socket实战之一:单线程通信
- 计算机科学千分之一高校,69所计算机科学进入ESI世界前1%的高校及排名,西电全国第四!...
- RxSwift之UI控件UITableView扩展的使用
- C和指针之字符串之strlen、strcpy、 strcat、strcmp使用总结
- azure第一个月_MLOps:两个Azure管道的故事
- CentOS7配置samba共享文件系统
- Centos6.5 Couchdb安装
- inout口简单说明
- Python--day46--mysql触发器
- android studio 融云,融云 SDK 集成详解 – Android Studio
- 二阶带阻有源滤波器设计与仿真测试
- 在Markdown中插入图片及图注的方法
- 使用Go语言解析多点触摸协议(MIT)TypeB由ADB调试产生的数据
- 决策树分析例题经典案例_决策树例题经典案例280_决策树在产品满意因素分析中的应用...
- 原神3.0上半角色活动祈愿-2源码
- 量化股票查询代码是什么?
- 2022年为什么降薪也要跳槽?机会比涨薪很重要?
- 小程序打包体积优化策略
- win10背景色改成豆沙绿 锁屏后失效修改方式
- html绝对定位重叠,怎么消除css中的绝对定位重叠问题