日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

当随机不够随机:一个在线扑克游戏的教训

發布時間:2024/4/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当随机不够随机:一个在线扑克游戏的教训 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天我要講一個發生于1999年,一個很流行的在線撲克平臺的開發者開發的洗牌軟件,帶有很微小但很致命的漏洞的故事。雖然這個故事已經15年了,但它給算法開發者帶來的教訓仍有重要意義。

在隨機數產生器或算法中,很容易出現一些微小的漏洞,但這些漏洞可能會導致災難性的結果。在線撲克和真正的撲克一樣,是以洗牌開始的。保證洗牌的隨機性尤為重要。

一副正常的牌有52張,并且各不相同,這樣就有52!,也就是?8.0658×10^67種不同的洗牌方式。這是一個巨大的數字。

1999年,asf軟件公司發布了這個軟件,支持那個年代許多流行的在線撲克平臺。他們發布了洗牌算法。

算法如下, 看看能否找到不對的地方。

1 procedure TDeck.Shuffle; 2 var 3 ctr: Byte; 4 tmp: Byte; 5 6 random_number: Byte; 7 begin 8 { Fill the deck with unique cards } 9 for ctr := 1 to 52 do 10 Card[ctr] := ctr; 11 12 { Generate a new seed based on the system clock } 13 randomize; 14 15 { Randomly rearrange each card } 16 for ctr := 1 to 52 do begin 17 random_number := random(51)+1; 18 tmp := card[random_number]; 19 card[random_number] := card[ctr]; 20 card[ctr] := tmp; 21 end; 22 23 CurrentCard := 1; 24 JustShuffled := True; 25 end;

?

錯誤1: 差一錯誤

上述算法試圖遍歷所有牌,將每一張牌跟另外一張隨機選擇的牌進行交換。但是犯了每個程序員都犯過的錯誤——差一錯誤。函數random(n)返回一個0到n-1之間的隨機數,而不是程序員所想的1到n之間的。因此,這個算法中第52張牌永遠不會和他自己進行交換,也就是說第52張牌永遠不會停在第52個位置。這是隨機洗牌不夠隨機的第一個原因。

?

錯誤2:洗牌不均勻

上述算法將第i張牌和 另外一張從整副也就是52張牌中隨機選擇的牌進行交換。而合適的洗牌算法應該只和第i到第n張牌中的一張進行交換。這是因為考慮到每一張牌應該只進行一次隨機交換。一副牌有n!種不同的排列,合適的洗牌算法應該只產生每種排列一次。原算法使一些排列出現的概率明顯高于另一些排列,是個不好的實現。

?

錯誤3:32位種子

如果你的業務或技術依賴于隨機數的使用,最好的選擇是采用一個硬件隨機數產生器。ASF卻不是,他用了一個帶有偽隨機數產生器的確定機。更糟糕的是,他使用的是32位的種子。由于種子100%的決定了偽隨機數產生器的輸出,只有N^32種可能的種子值就意味著只有N^32種可能的打亂順序。所以在理論上有8.0658×10^67 種打亂順序的情況下,他只有4百萬可能。

?

錯誤4:系統時鐘作為種子

上述算法使用Pascal函數Randomize()生成隨機數,而這個函數是根據從午夜開始的毫秒數來選擇種子的。由于一天之中只有86,400,000毫秒,也就意味著上述算法只能產生86,400,000種可能的亂序。

但更糟糕的是,由于隨機數產生器的種子是基于服務器時鐘的,黑客們只要將他們的程序與服務器時鐘同步就能夠將可能出現的亂序減少到只有200,000種。到那個時候一旦黑客知道5張牌,他就可以實時的對200,000種可能的亂序進行快速搜索,找到游戲中的那種。所以一旦黑客知道手中的兩張牌和3張公用牌,就可以猜出轉牌和河牌時會來什么牌,以及其他玩家的牌。(伯樂在線注:在德州撲克中,倒數第二張公共牌,叫“轉牌”,最后一張牌,叫“河牌”。)

以《算法》的作者Robert Sedgewick的一段話作為結束語:

“That’s a pretty tough thing to have happen if you’re implementing online poker. You might want to make sure that if you’re advertising that you’re doing a random shuffle that you go ahead and do so.”—Robert Sedgewick, Professor of Computer Science, Princeton

?


原文鏈接:?lauradhamilton???翻譯:?伯樂在線?-?Hibiscus
譯文鏈接:?http://blog.jobbole.com/64897/

轉載于:https://www.cnblogs.com/flowerH/p/3680791.html

總結

以上是生活随笔為你收集整理的当随机不够随机:一个在线扑克游戏的教训的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本乱码一区二区 | 综合久久一区二区 | 日韩精品福利 | 久久久久亚洲视频 | 中文字幕无码精品亚洲35 | www.com操| 国产成人在线视频免费观看 | 欧美成人黄色 | 在线观看你懂的网址 | 亚洲制服在线观看 | 无码人妻精品一区二区50 | 福利片网址| 色偷偷免费视频 | 亚洲日本欧美 | 西川结衣在线观看 | 久久久久久久久久成人 | 日日爱99 | 狠狠操av| 国内精品福利视频 | 麻豆传媒网址 | 草草影院国产第一页 | 欧美激情一二区 | 黄色大片aa | 五月婷婷深爱 | 国产精品亚洲一区二区三区 | 亚洲欧美影院 | 午夜国产 | 国产福利第一页 | 欧洲精品久久 | 亚洲精品h | 亚洲国产成人精品无码区99 | 国产乱偷 | 天天视频亚洲 | 中国第一毛片 | 美女考逼 | 久久精品人妻一区二区 | 久久伊人精品视频 | 奇米影视四色7777 | 男人的天堂成人 | 日韩一二三区 | 在线天堂在线 | 91久久婷婷 | 超碰av人人 | 欧美黑吊大战白妞 | 少妇精品久久久一区二区三区 | 亚洲国产一区在线 | 青青草伊人网 | 丰满少妇大力进入 | 日本三级一区 | 视频一区中文字幕 | 啪啪网站视频 | 热久久av| 成人精品动漫 | 国产精品视频观看 | 国产视频中文字幕 | 台湾佬中文字幕 | 九九热视频精品在线观看 | 三级黄色免费网站 | 免费h漫禁漫天天堂 | 求欧美精品网址 | 一级黄色在线观看 | 挪威xxxx性hd极品 | 天堂色区| 久久精品动漫 | 精品成人国产 | 青青草小视频 | 免费看黄色网 | 不卡三区| 毛片a级片 | 青青草免费av| 三级在线视频 | 中文字幕福利视频 | 激情aaa | 麻豆md0077饥渴少妇 | 激情综合网站 | 成人自拍视频 | 欧美午夜精品一区二区三区电影 | 国产乱码一区二区三区播放 | www青青草 | 亚洲精品欧洲精品 | xxxxav| 懂色av蜜臀av粉嫩av分 | 韩国美女福利视频 | 久久中文视频 | 成人午夜视频免费在线观看 | 欧美va在线观看 | 亚洲AV无码一区二区伊人久久 | 午夜精品少妇 | av操操操 | 老熟妇仑乱视频一区二区 | 男人私人影院 | 黑人3p波多野结衣在线观看 | 全程偷拍露脸中年夫妇 | 91午夜在线观看 | 天堂网一区二区 | 天天干天天爱天天操 | 国产精品热久久 | jlzzjlzz亚洲女人18 | 亚洲精品久久久中文字幕痴女 |