字母預言卡里的魔術與數學(二)——魔術背後的建模思路
- 2019 年 10 月 8 日
- 筆記
在上一期的文章中,我們分析了《字母預言卡》這個魔術的表演改進方式以及其中的一些思考,感興趣同學可以先回顧一下相關內容:
視頻1 字母預言卡
這裡我再把整個魔術的流程重述一遍,方便本期講解:
- 觀眾任意選擇一個字母;
- 觀眾選擇包含字母的卡片;
- 把兩疊卡片按照有無字母分開;
- 最後展現效果,那堆沒有觀眾選擇的字母卡片中只有一個字母沒有,就是觀眾選擇的字母。
這的確是一個很數學化的魔術,我們已經講過怎麼改進表演是它更像魔術。而在上一期的最後,我們提到了裏面的一些數學問題:
如果選項有m個,至少需要幾張卡片可以得到這個結果?或者反過來,n張卡片,最多可以容納幾個選項?以及,怎麼設計每張卡片的選項有無的組合,才能夠滿足要求呢?這個卡片的各個選項出現的結果是否是唯一的,還是,存在很多組滿足要求的解?
今天我們就來對這個魔術的本質過程進行如何建模的分析,為後面完善的數學模型建立和求解作準備。
問題分析
數學上對於比較複雜的問題,常常先作一些簡化假設,進而估算出大致範圍,為可能的結論指明一些方向。有些是純直覺的,比如費馬大定理,哥德巴赫猜想等等,提出的人是天才,證出來更要耗費幾代人的努力;而有些是有嚴謹推理的,比如放縮法,反證法等,從不同角度來理解問題。先解決一個不那麼難的問題,進而獲得結論範圍,指明方向以後再解決更難的,如對洗牌幾次才能洗亂的次數估計;另外,要證明一些正着來不容易下手的定理,如質數是無窮的就需要用反證法等等。
在這裡,我們可以從信息論角度簡單估算一下,要從m個選項中確定一個,需要的信息量是logm這麼多。由於這些卡片可以打亂順序,最後展現的結果被觀察的部分(合在一起以後哪個字母是沒有出現的)也和順序無關。所以,如果是用n張卡片做到這一點的話,那麼觀眾的選擇所提供的信息實際上是logC(n, k)這麼多。顯然,當n給定的時候,k = [n / 2]的時候取得最大值,所以可以盡量讓k在任何情況下都取這個數,使得觀眾無論選了那個選項都能夠在信息量上穩定地貢獻最多,超過logm而從理論上一定能夠給出足夠確定答案的信息。
在這個原版的魔術里,m = 26,n = 7,k = [7 / 2] = 3,則logC(7, 3) = 35 >= 26。所以,看起來沒有意外,這個魔術所用的取值在理論邊界範圍內,並沒有什麼奇蹟。而且經過了適度的剪裁,雖然7張卡可以變35個選項,但顯然猜字母是更合理的選擇,而logC(6, 3) = 20 < 26,果真無法達成信息量的界限,因此,卡片也確實至少要7張,一張都不能少。
這裡插敘一個問題,大家還記得上一講里關於2.2里的改進嗎?即7張卡片里,每個選項都是3次出現,而這個3,恰好就是C(7, 3)里的這個3,從7張卡中選了3個。
還有,從觀眾傳過來的原始信息來看,7次是否的答案最大的信息其實是7bit(在每一張卡片都等可能的是有和無的情況),而顯然,我們獲得的信息只有logC(7,3) = log35 < log 128,而這裡少的信息,就在於,很多時候,當前面幾個卡片的有無結果確定以後,後面的也就跟着分佈有偏甚至確定了,自然每次提供的答案的信息不夠1bit了。這裡從信息最大化使用的設計上看,是不如經典作品《街頭猜姓氏》的,那裡6次回答涵蓋了64個選項,哪怕姓氏分佈並不均勻所以信息量並不那麼大。但是這裡用7張卡片確定26個選擇,比較起來對信息的利用小了很多,明明有7bit的序列信息的潛力卻僅僅當成了組合數logC(7, 3)bit。
但是,正是因為如此,才有機會洗亂,才有機會輕易地預知若干張的答案,才能夠隨意洗亂疊成一疊還能夠顯現出消失效果。這些才是魔術看重的,效果上加分的,相反,哪怕把信息用到了極致,那也頂多是厲害罷了。
一塊沒有雕琢的科學璞玉,是不能直接變成魔術瑰寶的,這一洗禮的過程,就是我們的數學魔術設計啦!
又比如最近發現的一個《年齡透視卡》的魔術,7張卡片確定兩位數年齡,也是一個在常識上合理,科學上冗餘設計的魔術,也十分精彩地體現了這一點。在數學魔術里,魔術是甲方,數學是乙方,後者要為前者服務。不僅是魔術,在做每件事和人溝通合作,都需要有這樣的意識。
插敘完畢,回來,回來。
信息邊界確定了,接下來要計算的就是,如何在邊界內完成編碼,使得解碼(把不包含元素的卡片合起來,唯一一個空的選項就是所選結果)能夠恰好可行。
另外,還可以看到,如果這個邊界完全用滿的話,即令m = C(n, [n / 2]),此時那些包含選項數量應該恰好就是[n / 2](若n為奇數,則還有個等價的[n / 2] + 1的解)。否則會有此種選項條件下提供的信息量為log:
C(n, k)< logC(n, [n / 2]) = logm(這個帶入組合數定義是顯然的)
此時,理論上就不足以通過這些信息確定觀眾選的是哪一個元素,除非挖掘了新的信息,比如排列順序,選項範圍之類的,自然就無法明確知道觀眾所選的元素是哪一個了。
當然,即使不能完全確定是哪一個,只要能夠縮小到一定範圍,魔術就有辦法使用和包裝,這裡不展開了,以後會再分析到,但這裡顯然不是。
所以啊,我猜,很有可能,前面問題中描述的給定選項數m,需要的卡片張數最少的n,應該就是使得C(n, [n / 2]) >= m的最小那個n了,即:

(有沒有覺得,寫成公式反而更加不直觀了,還是大白話更容易理解哈!)
給定卡片張數n,能夠搞定的最多選項數則是C(n, [n / 2])。
這便是在用理論劃定界限,數學證明中常見的思路就是這樣,給定界限,且構造出一個解能夠達到這個界限,證畢。
相信你已經注意到了,C(n, [n / 2])這個數值十分重要,而這個組合數數值背後對應的是真實的這麼多個組合構成的集合,其大小是這個數。而每個組合可以寫作一個長度為n的二進制數,每一位恰好用0/1來代表是否選擇。雖然組合是無序的,指的是同樣的元素集合不同排序不算不同組合,但是這個二進制的各個元素的選取結果表達是有序的,不要弄混了。
注意哦,這裡的n在實際中的物理意義是卡片的張數!那麼一個長度為n的二進制數不就恰好給定了每張卡片該不該出現這個元素的答案了嘛?而且,恰好能夠給出需要的C(n,[n / 2])這麼多個元素的答案,那這麼給出來的解是不是真的滿足我們需要的性質呢?
提前告訴你最後答案是恰好滿足!分析猜想過程完全正確!
本篇文章,我們就原魔術現象如何進行建模進行了思考分析,並且劃定了問題的理論邊界,從直覺上給出了問題的解法,下一篇,我們給出該問題的精確的數學模型,敬請期待!