在德州撲克中 用最厲害的洗牌演算法和最低級的洗牌演算法會產生很大的差異嗎?

最高級的比如PS的演算法

最低級的比如我一個程序員基友教我的VS裡邊一個什麼函數(52)就可以 會自動生成1-52之間的一個數 賦值給52張牌即可

請問在用電腦玩德州撲克遊戲時 這些演算法會產生遊戲終端的差異嗎?


會差別很大, 但是到了一定程度, 差別就不大了.

計算機編程里, 所有的隨機數都是偽隨機數, 它是根據一個種子數, 通過固定的演算法生成的一個數, 你可以把他理解為從一個數A生成另一個數B, 演算法是曲折的, 但是路徑是唯一的, 假如A=100, 生成的B=1000, 那任何時間A賦值為100, B都等於1000, 不會說B=1001, 或12.

帶入你的例子, random(52)生成0~51個數, 那你的52是限定了生成52個數, 但預設的還有一個種子數, 這個編程語言一般會用系統是時間, 毫秒級的, 比如1480020102來代替, 也就是說,你在1480020102這個時刻生成了52張牌, 和在1480020103這個時刻生成了52張牌是不同的, 但是我知道你的演算法, 我用1480020102就能生成了你的那52張牌, 或者系統很繁忙, 在1480020102這個時刻需要生成了兩套牌, 那兩套牌就一樣了.

還有一個問題, 1480020102這個時刻對應52張牌, 1480020103這個時刻對應另外52張牌, 但是這個只是無數種組合中的兩種, 即使你從現在到2099年, 每毫秒都生成一張牌, 那也只是生成了52張牌的組合中一小小部分, 好多還沒有看到呢.

所以我們要提高演算法的複雜度, 比如我每次用系統時間生成一張牌, 放在牌堆里, 然後下一個時刻的時間再生成一張牌, 如果牌堆里沒有這張牌, 就把它放進去, 循環52次, 生成的牌就複雜多了, 因為每兩次取牌的時間間隔不是那麼確定, 計算機還要執行別的任務, 所以就不是那麼好預測了. 但這還不夠.

我們假設把你上次洗好的牌放在那, 每次用系統時間生成一個數, (1~52), 從洗好的牌堆里拿出相應的牌放在桌子上, 如果那張牌已經拿走了, 就繼續生成-拿-放, 直到這堆牌都被拿光了, 那這個牌的隨機性又增加了, 因為你的不確定時間性又大了.

再複雜一些, 把上面的過程做三次, 做七次, 那它能更隨機, 但是這個裡面還是有一個bug, 你都是用的系統時間來做的種子, 雖然毫秒級的時間夠多了, 而且他的組合夠多了, 但是你都是在1480020102~ 148100000這個時間段做的, 要符合純數學概念上的52張牌的組合還差一些. 你也許永遠都拿不到2,2去BB別人的AA.

這時候PS用的利器, 量子隨機數生成器登場了, 他用物理的方法對量子態的東西進行測量, 比如, 某幾個時間通過計數器的分子的個數, 組合成為一個大數, 作為種子, 再來生成排序, 那其隨機性就厲害了. 當然這還只是簡單的實現, 比如對生成的種子數進行哈希, 加密, 加密後的數再拿來做種子, 就更複雜了.

不過對於普通的遊戲, 可能在上面第四種洗法就夠用了, 更複雜的只是一種數學意義上的追求, 但就像普通的機械錶和百達翡翠的紀念款, 每天的誤差提高几秒, 就需要百倍的人工去研發, 這也是起品牌的價值, 對於PS來說, 我就是要做到極致, 挑不出一點毛病, 沒有瑕疵, 這就是品牌.

但是對於德州撲克, 洗牌只是公平的保證, 輸贏看的還是人的技術, 從我們的經驗看, 你的發牌再隨機, 你即使拿到AA, 一桌9個人, 6個人到了攤牌圈, 你的勝率還是很低的, 怎麼塑造自己形象, 做好資金管理, 才是取勝的關鍵.


不大,玩的是人心


推薦閱讀:

對於追書神器從免費看書到現在的收費看書有什麼看法?
手機能否實現掃描稱重的可能性?
如何評價Tag UX開發的App "榫卯"?
一款日記APP的受眾有哪些?
Temple Run 中為什麼沒有一個排行榜?

TAG:應用程序Application | 德州撲克 |