Math Games

打麻將的數學冷知識:兵貴神速!如何一眼就知道胡牌了沒?

11 Feb, 2021
打麻將的數學冷知識:兵貴神速!如何一眼就知道胡牌了沒? Photo Credit: Shutterstock / 達志影像

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

文字:郭君逸

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

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

電腦程式如何判斷聽牌?
shutterstock_254267875
Photo Credit: Shutterstock / 達志影像

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

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

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

#定理01:

一副牌P,若把一個對子拿掉後,假設此時數字最小的牌是「x」,

若x的張數是3張以上,則拿掉3張x(一刻)後,剩下牌為Q。
否則拿掉x, x+1, x+2(一順)之後,剩下的牌為Q。(若無法拿,則P沒胡)

則「P胡」若且唯若「Q胡」。
shutterstock_267326777
Photo Credit: Shutterstock / 達志影像

聽起來很複雜嗎?下面舉個例子說明:

例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不是胡牌型。

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

shutterstock_1075923218
Photo Credit: Shutterstock / 達志影像

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

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

例3:判斷3456667888聽什麼牌?

  • 加入1,剩13開頭,沒胡
  • 加入2

拿掉66,剩234567888,胡!
拿掉88,剩234566678,沒胡

  • 加入3

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

  • 加入4

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

  • 加入5,略,胡
  • 加入6,略,胡
  • 加入7,略,胡
  • 加入8,略,胡
  • 加入9,略,胡

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

奴役電腦幫你辦事
shutterstock_6106063
Photo Credit: Shutterstock / 達志影像

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

李志希教授的電腦幫忙跑了所有的情況,發現十三張麻將除了「國士無雙」(俗稱十三么)可以聽十三張牌之外,聽九個洞的情況只有一種:1112345678999,俗稱「九連寶燈」。而聽八個洞的情況有16種;聽七個洞的情況有79種。

筆者自己也計算了台灣麻將十六張的情況:聽九個洞的情況有11種,有1122233345678999、1112345667788999、1112345666777888、1112345566778999、1112344556678999,或是上述平移、對稱的牌型。聽八洞的情況有94種;聽七個洞的則有532種。

眼睛的判斷

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

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

c40wbxgsjnq0ylsk0lm5vaqbwjeo9o

例如上面的牌型,其中三六九牌共7張,二五八牌共6張,一四七牌共4張。這樣一眼就知道沒有胡牌,完全不用去試。

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

獨門秘技

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

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

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

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

#定理02:

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

那麼,23333444455556666是否胡牌呢?

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

shutterstock_45588898
Photo Credit: Shutterstock / 達志影像

有了定理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,胡牌。

參考資料

Yuan Cheng, Chi-Kwong Li and Sharon H. Li, Mathematical aspect of the combinatorial game "Mahjong", arXiv:1707.07345v1

本文經關鍵評論網授權刊登,原文發表於此

同場加映

責任編輯:古家萱
核稿編輯:林君玶

編輯精選

TNL 編輯精選好文轉載,感謝作者的熱情分享!

更多此作者文章

抓住家人健康,先抓住他的胃 - 蛋白質+益生菌家人健康顧好顧滿

10 May, 2021
抓住家人健康,先抓住他的胃 - 蛋白質+益生菌家人健康顧好顧滿

焦頭爛額又失衡的生活如何喘息?時間就這麼多,忙碌生活中如何兼具家人健康和孩子成長?選擇正確的營養保健食品,幫助體質打底、加乘保護力!

小孩不舒服需要看病,偏偏卡在會議中無法抽身,只好等結束再趕回家照顧小孩...,到了假日,除了抽空陪伴爸媽,回到家中還要面對爆炸的洗衣籃及廚房碗盤。妳是否也過著這種焦頭爛額又失衡的生活呢?

一天24小時,總是被壓榨到最後一分一秒,沒有一刻可以休息,久而久之,生活各方面都壓得令人喘不過氣。當外在環境愈忙碌失衡,妳愈需要「底氣」維持生活平衡!先擁有健康的身體、打造好體質,才能更游刃有餘面對未來更多挑戰,守護全家人的健康!

蛋白質幫妳打底好體質,補充營養好活力
01_完稿_V1_(1)

想要維持充足體力面對生活及工作中的種種任務與挑戰,就靠蛋白質來為妳打底吧!根據衛生福利部健康署文章指出,若三餐飲食攝取的蛋白質營養不足,不只可能影響肌肉生成,也會明顯感到虛弱、體力變差。

補充蛋白質除了透過飲食,也可以透過營養保健品來補充,如何才能挑選到好的蛋白質補充品?注意下列幾點,就可以讓身體獲取更完整的營養:

  1. 植物性蛋白質:蛋白質可分為動物性跟植物性兩大來源,想要聰明攝取充足份量的蛋白質,植物性蛋白質相對來說會是更健康的選擇(註),包含像是大豆、豌豆、小麥這些植物來源。
  2. 零乳糖、零膽固醇、少添加物:現代人三餐多普遍外食,若想攝取足量的蛋白質,往往也攝取進多餘的脂肪、膽固醇與熱量,因此建議選擇蛋白質的同時,也推薦選擇零乳糖、零膽固醇,沒有額外添加物的優質來源。
  3. PDCAAS 達到1:PDCAAS(Protein Digestibility Corrected Amino Acid Score)是國際公認的蛋白質評估標準,PDCAAS 達到1才可稱為「優質」蛋白質,確保蛋白質的功效。
保健身體健康,益生菌是防護力加乘關鍵
02_完稿_V1

打底好體質以外,也需要為身體防禦外來攻擊,這時候就必須照顧好身體的免疫力。而人體的免疫力好壞,有一半以上因素取決於腸道,換言之,平衡腸道菌群中「好菌」與「壞菌」的比例,就是維持腸道健康的關鍵。

該如何增加腸道內的好菌?一般飲食裡,可以透過攝取發酵類食物獲取益生菌,然而經過胃酸消化後,真正能在腸道產生作用的益生菌數量相對減少很多,也無法定時定量補充。忙碌的妳,該選擇最有效率的方式——挑選無添加物、科學研究證實安全有效的益生菌,於日常三餐飲食中添加補充,就能幫助打造健康腸道!

如何挑選優良的益生菌?注意下列幾項要點:

  1. 菌株名稱:有明確標示出菌株名稱,可以顯示產品的安全性,編碼就如同菌株的身分證,被有效記錄在菌種庫裡面。
  2. 實驗研究和科學證據:例如乳雙歧桿菌BL-04TM、嗜酸乳桿菌 La-14TM、嗜酸乳桿菌 NCFM®及副乾酪乳桿菌 Lpc-37TM,這些菌株擁有超過100篇科學論文及實驗證明,更佐證能夠幫助維持腸道內菌叢平衡,全面打造健康防護罩。
  3. 有效通過胃酸,定殖腸道:食物消化時會先經過胃,而胃酸會破壞益生菌,因此應確保菌株存活率,建議90%以上有效通過胃酸,能順利抵達腸道,在腸道內發揮作用。
  4. 益菌生:優良益生菌中需添加像是菊糖、膳食纖維、寡糖等「益菌生」,這些有助於促進益生菌在腸道生長繁殖的營養素,讓吃進肚子的益生菌真正有效留存在腸道,維持健康。
  5. 無香料、甜味劑:無人工香料、甜味劑,對身體更無負擔。
加一點健康:守護全家人健康就從這做起
03_完稿_V1

優質植物性蛋白質提供妳身體活力、而優良益生菌則可為身體的防禦力加分。從今天開始,不妨建立一個健康儀式——養成同時補充益生菌和蛋白質的好習慣,打下健康基礎,就不怕生活中迎面而來的各種挑戰,照顧好自己,幫全家人守護健康!

本文由紐崔萊贊助

(註):蛋白質主要可分為動物性與植物性兩類,根據刊登在《美國醫學期刊:內科醫學(JAMA Internal Medicine)》上的研究指出,飲食中若以植物性蛋白質取代部分動物性蛋白質,可以顯著降低死亡率,例如取代雞蛋能降低22.5%,取代肉類則平均可降低14%;日本國家癌症中心的研究也發現,如果把佔3%熱量的紅肉蛋白替換成植物蛋白,預計可以降低34%的死亡風險。

品牌贊助

由every little d《廣編團隊》製作,由品牌贊助,針對某個特定議題進行研究與探討,不使用浮誇字眼,致力用客觀的角度提供讀者以另一個角度了解商業行為背後發生的議題。

更多此作者文章