怎样的中奖算法能让人信服(转)

话说写一个抽奖程序还不容易,不就是生成一个随机数吗,哪需什么算法之类的。

从技术上说,这确实不难。事实上,你怎么写都可以,因为程序只运行在特定的设备上,外人根本无法了解其中的细节。

那么问题就来了,如何才能让大家相信你没有作弊?

你会说,我可以把程序开源,抽奖前大家监督运行。不过这样就一定可信了吗?

就算程序没问题,也不代表系统就是可靠的。或许你早已偷偷开了外挂,这样无论程序有多公正,结果仍躲不出魔掌。

那就退一步吧,每次开奖前重装一次系统。

不过,假设所有的软件都可信,但最终仍需通过硬件来执行。如果硬件底层就有猫腻,那就根本不可能发觉了。

就算硬件也没问题,最终结果还得展示给大家吧。如果显示器就是一个加了特技的道具,那么一切都白搭了。。。



没法玩了。抽奖本来就建立在信任的基础上,存心弄虚作假,那谁还玩的赢。

难道就没有一个能让大家信服的技术手段,来解决这个问题吗?

其实,大家质疑的并非是算法,而是运行环境。毕竟,虚拟世界里玄机太多了。

所以,我们必须放弃自己产生随机数的做法,而是从更客观的第三方获取。

宇宙

大自然变幻无常,充满各种随机性。

微观的世界更是扑朔迷离,要是使用量子的状态,来计算中奖号码,客观程度堪比宇宙真理了。

听起来似乎很理想,但如何才能获得这些数据?只能通过科学仪器来测量。

然而再精准的仪器,也得由人来控制。可惜我们不懂,只能让科学家们去操作。

这不,又涉及到人这个环节了。只要有好处,砖家想怎么说都可以,反正一般人也无从考证。

就如同观看宇宙节目,说星星有 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

得到一个结果。不过这种计算方式也太弱了,要是一个城市温度升高,另一个降低,也许结果正好就抵消了。

所以,为了防止被预测,我们得让任何一个数据的细微变化,都能使得结果变得完全不同。

于是,经典的散列算法用在这里再好不过了吧。

我们照着天气预报的顺序,依次算出每个城市的气温散列值:

城市 气温  散列
北京 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

时间: 2024-10-11 15:42:31

怎样的中奖算法能让人信服(转)的相关文章

Nara模仿神经元网络设计推荐算法,根据人的偏好与品味推荐餐馆

骁骑 ? 1小时前 Nara模仿神经元网络设计推荐算法,根据人的偏好与品味推荐餐馆 我们可以模仿神经元的运作方式去设计算法,MIT 的几位科学家建立团队把这套原理应用到商业中去,建立了初创公司Nara. Nara 正是基于神经元的网络结构设计了一套推荐算法,根据人们的偏好与品味去推荐餐馆.现在,北美已经有一百多万家餐馆纳入了 Nara 的神经元网络.而且,像人的大脑一样,Nara 也拥有学习能力,它可以把现实中的信息进行情境化分析.所以不仅餐馆,酒店也可以纳入这个体系. 用户点进 Nara 的网

微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服

微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服 2014/10/08 · Testin · 开发人员訪谈 2013年11月1日,谷歌运行董事长施密特(Eric Emerson Schmidt) 踏进北京中关村电子卖场,但为何Testin云測CEO王军会全程陪伴并介绍中国安卓市场的状况?难道仅仅是王军的英文流利?那为何Testin云測又要先后拒绝腾讯.百度.阿里的投资? 这是新浪微博用户@硅谷之歌 的疑问,其认证资料为长春某公司的"外贸B2B事业部project师".

微博达人硅谷之歌:Testin云测移动搜索性能测试很是让人信服

微博达人硅谷之歌:Testin云测移动搜索性能测试很是让人信服 2014/10/08 · Testin · 开发者访谈 2013年11月1日,谷歌执行董事长施密特(Eric Emerson Schmidt) 踏进北京中关村电子卖场,但为何Testin云测CEO王军会全程陪伴并介绍中国安卓市场的状况?难道只是王军的英文流利?那为何Testin云测又要先后拒绝腾讯.百度.阿里的投资? 这是新浪微博用户@硅谷之歌 的疑问,其认证资料为长春某公司的"外贸B2B事业部工程师", 经常与APP打交

php中奖算法逻辑

最近公司有两个活动, 一个是砸蛋活动, 另一个是转盘活动. 后台这边需要做接口进行对接,当用户在前台点击进行抽奖的时候,发送AJAX请求给后台,后台进行业务处理包括记录用户中奖信息,然后返回json格式的数据给前台进行显示 其中最为核心的就是中奖的算法逻辑了. 在网上查看了一些算法之后发现下面这种算法效率比较高. 1 <?php 2 //中奖奖品 3 $prize_arr = array( 4 5 0=>array( 'id'=>1,'prize'=>'现金500W','v'=&g

我有一个梦想,希望每一位提到算法的人,不再立即紧皱眉头

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书 --异步小编 多年来,我有一个梦想,希望每一位提到算法的人,不再立即紧皱眉头,脑海闪现枯燥的公式.冗长的代码:希望每一位阅读和使用算法的人,体会到算法之美,像躺在法国普罗旺斯小镇的长椅上,呷一口红酒,闭上眼睛,体会舌尖上的美味,感受鼻腔中满溢的薰衣草的芳香-- 打开算法之门 瑞士著名的科学家N.Wirth教授曾提出:数据结构+算法=程序. 数据结构是程序的骨架,算法是程序的灵魂. 在我

银行未通知开卡人将信用额度降为1元合理吗?

近日,乐视又成功登上了媒体头条!可惜不是因为乐视起死回生,而是多名乐视(前)员工个人的建行信用卡额度被调整至1元!乐视近年来的确陷入缺钱.欠款的漩涡之中,公司表现极其萎靡不振,但这是否意味着乐视员工也该被银行"看扁"? 我们能理解银行迫切的风控需求,也理解银行对坏账的担心,更明白银行对乐视的不看好.但拿乐视员工"开刀"的做法,是否有失公允?而从另一个角度看,为何这样的事只发生在国内极少数银行身上?为何这样的做法让人感觉怪怪的,甚至受到众多网友几乎一致性的批评? 质疑

EM算法的思考

参考文献1: http://blog.sina.com.cn/s/blog_6c7b434d01013zwe.html 参考文献2: http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html EM算法这个烦人的东西,之前看懂了,现在又忘的一塌糊涂,竟然短路.之前那篇博客写得乱七八糟.现在重新理一遍. 首先,用李航的证明方法(不推荐). 齐次,我们根据NG的: 例子参见文献1.

排序算法汇总总结_Java实现

一.插入排序 直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 代码实现: public class Inseretion_Sort {     public static void main(Stri

让人很容易误解的TCP拥塞控制算法

正文 很多人会认为一个好的TCP拥塞控制算法会让连接加速,这种观点是错误的,恰恰相反,所有的拥塞控制算法都是为了TCP可以在贪婪的时候悬崖勒马,大多数时候,拥塞控制是降低了数据发送的速度. 我在本文中会针对近期跟业内朋友之间的聊天记录,总结出三言两语.        TCP拥塞控制的终极目标绝对不是加快数据发送的速度,这种理解非常自私且肤浅!它的终结目标是在公平占有带宽的前提下无限度提高带宽的利用率!        如果你只关注一个独立的TCP连接本身,那么你也许永远都不可能设计出什么比较好的算