【跨年加薪指南】用數學破解「麻將」,一眼就知道胡牌機率有多高 | TechOrange 科技報橘
Search
Close this search box.

【跨年加薪指南】用數學破解「麻將」,一眼就知道胡牌機率有多高

【我們為什麼會挑選這篇文章】應付不了親戚的問候攻勢,麻將桌上也不能敗下陣來!我們貼心的幫你找到今年過年麻將胡牌攻略,作者郭君逸,目前為國立台灣師範大學數學系副教授、同時也是世界魔方聯盟(WCA)台灣地區認證員,教你從基本的組合觀察胡牌牌型,利用一點簡單的數學不用背牌,幫你把去年輸到脫褲的錢一併贏回來!(責任編輯:鄧天心)

麻將胡牌的演算法

一個人會不會打麻將有一項基本的判斷方法,「能夠判斷是否胡牌」。在實戰中,判斷的速度越快越好,如此才能在取捨牌的時候,很快的知道打哪張牌聽的牌比較好,也不會因為停下來比畫思考被看穿手裡擁有的牌型。

要知道聽什麼牌,最快的方式是背起來。常打麻將的人,腦中自然背了不少牌型,常見牌型瞬間就能判斷,除非拿了許多同花色的牌才會造成困擾。

電腦程式如何判斷聽牌?

要判斷聽牌,得先知道胡牌的牌型,如同要準備晚餐的食材之前,得先知道晚餐想吃什麼。

一般都是刪除「一刻 (3 張相同牌) 」或「一順 (3 張連續牌)」,也就是所謂的「搭子」,再利用〈遞迴〉程序處理。這樣做的效率並不太優,雖然判斷一副牌還是瞬間完成,但若要判斷十萬副牌局,效率好壞造成的影響非常之大。

2017年,威廉斯堡大學數學系的李志光教授等人發表了一項麻將研究,論文中提出了一套高效率的判斷胡牌演算法,以下版本由筆者修改呈現。

定理1:一副牌 P,若把一個對子 (俗稱眼睛) 拿掉後,假設此時數字最小的牌是 x,

·     若 x 的張數是 3 張以上,則拿掉 3 張 x (一刻)後,剩下牌為 Q。

·     否則拿掉 x, x+1, x+2 (一順)之後,剩下的牌為Q。(若無法拿,則 P 沒胡)

則「P 胡」若且唯若「 Q 胡」。

舉個例子說明:

例1:判斷 P = 33345678 是否胡牌?

P 中唯一能當眼睛的地方,就是 3,因此把 33 一對眼睛拿掉,變成 Q = 345678,Q 是胡牌型,所以 P 也是。

例2:判斷 P = 55666777889 是否胡牌?

其中 55, 66, 77, 88 都可以當眼睛,每種情況都試一次。

·     若 55 當眼,剩下 666777889;最小的 6 有三張,直接拿掉666,剩 777889,再拿 777,得 889,所以沒胡。

·     若 66 當眼,剩下 556777889;最小的是兩張 5,但沒有辦法拿掉兩個 567 了,所以沒胡。

·     若 77 當眼,剩下 556667889;最小的是兩張 5,但沒有辦法拿掉兩個 567 了,所以沒胡。

各種能拿掉眼睛的方式都試過,都無法胡,所以 P 不是胡牌型。

這樣做的好處

只要拿掉一副牌的眼睛後,就可以一路由最小的牌取到最大的牌,依序檢驗,「線性時間」即可判斷是否胡牌,避免來來去去的反覆嘗試,省下非常多的計算時間。

已經學會胡牌型之後,判斷聽牌就簡單了。

只要試著加入任何一張牌,再嘗試拿掉各種可能的眼睛,利用 定理1 判斷是否可以胡牌即可得知聽哪些牌,僅需要 O(n3 ) 的時間。

例3:判斷 3456667888 聽什麼牌?

·     加入1,剩 13 開頭,沒胡

·     加入2,

o  拿掉 66,剩 234567888,胡!!!

o  拿掉 88,剩 234566678,沒胡

·     加入3,

o  拿掉 33,剩 456667888,沒胡

o  拿掉 66 或 88,剩 334 開頭,沒胡

·     加入4,

o  拿掉 44,剩 35 開頭,沒胡

o  拿掉 66 或 88,剩 3445 開頭,沒胡

·     加入5,略,胡

·     加入6,略,胡

·     加入7,略,胡

·     加入8,略,胡

·     加入9,略,胡

上述方法雖然是電腦的判斷方式,但其實人腦判斷,也是相同道理,先把可能的眼睛拿出來,然後最小牌能拿走一刻即拿走一刻,否則試著拿走一順,由於人腦很強大,會自動省略一些無關緊要的判斷步驟,因此執行速度並不會太慢。

奴役電腦幫你辦事

有了快速判斷聽牌、胡牌的方法後,就可以開開心心奴役電腦幫我們做一些血汗計算了。

李志希教授的電腦幫忙跑了所有的情況,發現十三張麻將除了〈國士無雙,俗稱十三么〉可以聽十三張牌之外

聽九個洞的情況只有一種 1112345678999,俗稱〈九連寶燈〉。

聽八個洞的情況有 16 種;聽七個洞的情況有 79 種。

筆者自己也計算了台灣麻將十六張的情況:

聽九個洞的情況有 11 種,有 1122233345678999、1112345667788999、1112345666777888、1112345566778999、1112344556678999,或是上述平移、對稱的牌型。

聽八洞的情況有 94 種;聽七個洞的則有 532 種。

眼睛的判斷

李教授的方法告訴我們判斷胡牌與否,先找出眼睛會比較快。一旦眼睛的選擇多,事情就變得越複雜,電腦當然沒問題,但人腦判斷可能稍微慢了一點。此時,數學可以派上用場。

方法是這樣的,先只看同個花色,把所有的牌分成3堆:(一四七)堆,(二五八)堆,(三六九)堆,接著觀察每堆的張數。

例如上面的牌型,其中三六九牌共 7 張,二五八牌共 6 張,一四七牌共 4 張。

這樣一眼就知道沒有胡牌!

這樣一眼就知道沒有胡牌!

這樣一眼就知道沒有胡牌!

完全不用去試。

什麼!!!為什麼可以這麼快?因為我有獨門秘技!

獨門秘技

若要胡牌的話,要抓成三個三個一組的搭子再搭配一對眼睛,搭子若是「順」,貢獻這三堆的個數必同時都加 1;搭子若是「刻」,則某一堆會加 3。

因此,若先不看眼睛,這三堆的牌數除以 3 的餘數應該要相等。再加上眼睛,就只會讓某一堆個數與其他兩堆不同。

以上例來說,三堆的張數分別為 7, 6, 4 張,除以 3 的餘數為 1, 0, 1,於是,眼睛只有可能出現在第二堆,也就是二五八。若 55 拿掉,前半的 33344 無法湊成兩搭,因此沒胡;若 88 拿掉,依 定理1,333 也可以拿掉,剩下的局部44556 也無法湊成兩搭,所以也無法胡牌。

我們再將這個結果寫成定理 (沒辦法,數學家就是喜歡這樣XD)

定理2:一副牌,依一四七、二五八、三六九分成三堆,每堆的張數除以三的餘數必有一個與另兩個不同,則眼睛就在不同的那堆裡。

回到古天樂手上拿的牌型來說:23333444455556666 是否胡牌呢?

因為一四七有 4 張,二五八有 5 張,三六九有 8 張,除以 3 分別餘 1, 2, 2,所以眼睛只可能是 44,接著把 44 拿掉,剩下 233334455556666,然後利用 定理1 依序去拿,得到 234, 333, 456, 555, 666 ,所以是胡牌型。

有了 定理2,判斷胡牌時眼睛的可能性,可縮減到一堆,檢驗至多三次,大幅提升計算效率。

當整副牌同時有萬、筒、條、字的時候,因為眼睛只會在其中一種花色,因此其它花色一定都是 3 的倍數,利用張數就可以推判眼睛在哪個花色,所以只要能判斷其中一種花色即可。

假想一個更困難的例子,每張牌可以超過 4 張的話,

·     請問:33333444555566777888899999 有沒有胡牌?

三六九,共 12 張,除以 3 餘 0一四七,共 6 張,除以 3 餘 0;二五八,共 8 張,除以 3 餘 2,所以若能胡牌的話,眼睛必是 55 或 88:

假設是55,利用 定理1,由小到大拿成333, 345, 345後剩 466777888899999,而 4 的後面斷了,所以沒有胡。

假設是88,利用 定理1,由小到大拿成333, 345, 345, 456, 567, 789, 789, 999,胡牌。

參考資料
1. Yuan Cheng, Chi-Kwong Li and Sharon H. Li, Mathematical aspect of the combinatorial game “Mahjong”, arXiv:1707.07345v1

__

(本文經 UniMath 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈打麻將的數學冷知識(二)一眼就知道胡牌了沒〉 。首圖來源:YouTube

延伸閱讀

從賭城贏到華爾街的傳奇數學家:20 年前就用 IBM 704 電腦寫出 21 點套利公式

【世上最簡單的公式】歷代數學家們怎麼解釋:為什麼 1 加 1 等於 2?

賭博=莊家必贏!用國中數學解析賭博方程式,結論只有「賭徒勝率為 0%」