關於洗牌的研究(一)——平常你都是怎麼洗牌的?
- 2019 年 10 月 8 日
- 筆記
寫再前面:本系列作品由MathMagician獨家首發,一共有七篇,從數學和魔術兩個角度對日常生活中「洗牌」這一現象作了掛一漏萬的分析。之所以說是掛一漏萬,是因為無論數學還是魔術,洗牌中的任何一個小點都夠寫幾篇了,這點篇幅不可能絕對全面。所以,本系列主要選取了一些常見的洗牌方式和相關內容展開作了一些介紹,包括洗牌分類,混亂度評價,過程建模,近似計算,以及幾個基本但是及其巧妙的利用洗牌規律設計的魔術。相信聰明的你讀完以後,會在數學和魔術上,都對「洗牌」這一現象有着更加深入的認識。
本篇是第一篇:平常你都是怎麼洗牌的?
在日常生活中,無論是娛樂的鬥地主升級,亦或是帶點賭博性質的德州三公梭哈這樣撲克遊戲,保證公平的重要一環就是洗牌。
圖1 花式洗牌

在正規的賭場有一個巨大的牌靴來發牌,裏面有12副牌保證可以玩比較長時間和接近均勻分佈的選牌,一般在發牌前會像麻將一樣洗亂重新發牌;而在一些大型撲克比賽中,為保證公平,洗牌的流程往往也會先後進行麻將式混亂,鴿尾式洗牌和印度洗牌。按理說第一步已經是最亂的方式了,為防止偷看而加上後面兩步。
或者在QQ鬥地主這類棋牌類計算機遊戲中,直接就是機器隨機數了,甚至還有不洗牌玩法,也可以保證一定程度的洗亂和公平(注意這兩個概念不一樣,哪怕不洗牌,只要不偷看,雖然沒洗亂,但也是公平的,後面會分析此問題)。
但是,我們平常兩三好友打牌時候,往往為了節約時間,應付式地洗牌幾次,方法也各異,那麼問題來了:
這麼洗牌真的保證洗亂了嗎?
如果沒有洗亂,遊戲還是公平的嗎?還能體現玩家水平嗎?
如果沒有洗亂,或者增加一些手法就能不洗亂,這些點能不能作為產生魔術現象的原理來設計魔術?
帶着這些現象和問題,我們一起來研究一下撲克牌中的洗牌問題。
洗牌方式分類
大體可以分為Determined Shuffle(確定洗牌)和Undetermined Shuffle(非確定洗牌),數學的話講就是函數和隨機過程。
1. Undetermined Shuffle
1.1 Cut in hand or on the table(切牌)
圖2 花切

往往是固定疊數和新排列位置的方式,隨機的是每疊牌的張數,再按照一定模式重新排列,兩個過程共同構成一次隨機的切牌,而後者往往是固定的,隨機來源於前者。這個可以演化為很多好看的花式切牌,作為魔術中的調劑和普通撲克遊戲中保證公平的方式,其過程的數學表達為:
new_deck = Perm(Cut(old_deck))
這裡有一個特例,就是對於二切,即僅僅分成兩疊牌,此時撲克牌建模成循環隊列以後,切牌不影響其數值的任何變化,僅僅改變頭指針,換句話說等於沒洗,只是改變了你觀察它的位置,這一簡單的性質便可以作為很多魔術的設計元素,雖然難以獨立使用,但卻是一個整體效果不錯的添頭,我們後面會有相關魔術分享。
1.2 Hindu Shuffle & Overhand Shuffle(印度洗牌,過手洗牌)
圖3 Hindu Shuffle

這是更加隨機的選擇疊數和每疊張數,但是卻固定地對所有疊進行的reverse操作,可以看作切牌的特例:
new_deck = Reverse(Cut(old_deck))
美國人習慣過手洗,而東方人習慣印度洗牌,但就混亂排序的效果上看沒有任何區別,實踐和理論分析表明,這不是一個很好的洗牌方式,費半天勁可能對撲克牌的混亂程度並沒有太大作用。但反過來,由於太多地方沒有洗亂了,所以給了魔術師很多偷看撲克牌和強選的機會,像印度式暗撇和強控底牌便是如此,而這兩個性質已經可以設計很多厲害的效果了。後面我們有專門章節講這類用印度洗牌特性設計的魔術。
1.3 Riffle Shuffle(鴿尾式洗牌) &Variation
圖4 Riffle Shuffle

這是我們最常見的分兩疊交錯的洗牌法,統稱交叉洗牌,以Riffle Shuffle最為常見。有不少變種,如優美的Rosette shuffle;還有完美洗牌的基本形式butt shuffle,這特別傷撲克牌。這些是最經典和經濟的洗牌方式,究竟為什麼是最經濟以及如何衡量的我們後面會逐步介紹到,這是本系列數學部分的核心內容;
1.4 Top-to-Random Shuffle, Random-Transposition,Random-Adjacent-Transposition, Rudvalis Shuffle, ThorpShuffle, L-reversal chain and etc.
這些方法大多是專門研究洗牌這一隨機過程的數學家構造的方式,往往在真實遊戲中不會使用,大家有興趣可以google一下進一步了解,另外還有一些特殊的如CATO,COAT,Gilbreath等等,裏面有很多巧妙的應用可以用來設計魔術,後面我們會有專門的章節講到他們,這裡暫不涉及。
其實,這裡的每一種洗牌方法,除非直接鋪在桌子上像搓麻將一樣搓開,其洗亂的程度相對於整疊牌都是很小的,都保有很多不變的性質,細細思量,並使用之,就可以創作一些魔術了,而且,所見即所得,完全自動化哦~後面我們會介紹。
2. Determined Shuffle
2.1 Monge shuffle & Milk shuffle(蒙赫洗牌,牛奶洗牌)
這兩種洗牌方式互為逆過程(回憶一下前面《Reverse原理的數學和魔幻藝術》以及《加加減減的奧秘——從數學到魔術的思考》系列中關於對稱關係,反函數概念的介紹),類似的還有down under alternating shuffle,或者均勻發牌等過程,這些都是可以構造嚴格逆過程的。因此,根據設計預測或巧合類魔術的思路,這些過程都可以作為素材使用,其中有些洗牌的有些發牌的,或者融合在一起。
2.2 (In / Out) Faro Shuffle & Anti-faroShuffle(完美洗牌,反完美洗牌)
圖5 Faro Shuffle

可看作是一種確定的Riffle Shuffle。這個對手法和撲克質量,新舊程度有一定要求,尤其是anti-faro,沒有點天賦還真學不會,雖然可以像2.1一樣直接構造逆過程,但非專業難以使用。如果完整執行的話對於撲克中的前半部分牌的位置值恰相當於計算機的左移位操作,in faro則還要再加1(從0開始數)。由此,某張撲克牌的位置可以經過幾次洗牌就控制到一個固定的地方,類巴格拉斯的效果就可以由此做到了。這個手法可以當純表演,也可以作為固定流程中的一環,靈活使用。本系列也有例子來來介紹這方面的魔術內容。
2.3 False Cut of 2/3/4…… Decks, TableFalse Cut(n段假切)
我們說切牌改變的是分出牌疊的排列,雖然改變方式固定,但隨機來自於每疊牌的張數。但是有個特殊情況是,如果排列不變(包括局部不變),那這裡張數的隨機就是失效的,不會變成撲克序列的隨機。故假切就是這麼一種做法,每一步看似切亂的過程都有對應逆排列過程來恢復它。這個一般在魔術中作為一種假洗牌獲得對牌的位置控制,或者直接當作花切表演來進行,也很美麗,就像開頭圖1一樣。
我大約初中左右通過百度學到第一個三段假切,後來加到四段,還有桌面二,三段假切,甚至最愛魔術的時候還自己設計切牌動作,不過前輩造的輪子比我自己發明的好太多了,而實戰中的魔術對切牌要求並沒有那麼高,所以就沒有再深入了。不過喜歡的小夥伴可以繼續加深研究,是個很難的方向。
2.4 Fake Riffle Shuffle(假鴿尾式洗牌)
效果同假切,但是看起來會更加逼真,畢竟用的是看起來整疊都完成的Riffle Shuffle,如果做得逼真,能讓觀眾參與進來,觀眾一定會以為這是真的洗亂了。
總的來說,2部分洗牌方式在撲克遊戲中往往並不常用,你想啊,從開始到結束,撲克走了一個確定的操作,以一個函數關係映射到了一個完全確定,可預測的序列了,這不沒有引入任何混亂度,相當於沒洗嘛,所以天然地在正常的撲克遊戲中遭到拋棄。
而一般時候不用,恰好變魔術時候管用啊!尤其是,這些洗牌方式如果動作上看起來和正常洗牌一樣,不就恰好造成了觀眾認知和實際發生事情的差距,魔術現象不就構造出來了嘛!正是如此,所有的假切牌/洗牌手法都有一個真實的過程與之對應而所做之事有略有不同,進而造成魔術效果,再準備着到別處展示出來。而1部分的方式也有着一些不變的性質,使用起來能達到selfworking的效果,本系列會略有介紹,後面的文章也會反覆提到。
介紹完洗牌的分類,我們可以看看,從直覺上看,平常我們簡單的洗牌,對於真的要把牌洗亂再開始遊戲的要求,真的做到了嗎