IT之家 2 月 11 日消息,劉謙在今年春晚表演的魔術引發(fā)網友熱議,對此,北京大學官方公眾號進行了詳細解讀,并揭秘背后的數學問題 ——“約瑟夫問題”。
魔術操作步驟:
步驟 1:將準備好的 4 張撲克牌平均撕成兩份,并疊在一起。
步驟 2:將牌堆頂數量為【名字字數】的牌移至牌堆底。
步驟 3:將前三張牌放在牌堆中間并取出牌堆頂的牌,放置在一旁。
步驟 4:取出牌堆頂的若干張牌插入牌堆中間,此處選擇的牌數為南方人取 1 張,北方人取 2 張,若不確定是南方人還是北方人取 3 張。
步驟 5:男生扔掉牌堆頂 1 張,女生扔掉牌堆頂 2 張。
步驟 6:執(zhí)行“見證奇跡的時刻”循環(huán),每說一個字,就取出牌堆頂一張牌放置在牌堆底。
步驟 7:從牌堆頂開始,每次先將牌堆頂的一張牌放在牌堆底,再扔掉牌堆頂的一張牌,重復以上操作直到只剩一張牌,檢查此牌和放置在一旁的牌是否吻合。若吻合,則魔術成功。
魔術步驟揭秘:
步驟一
我們令選擇的四張撲克牌分別為 1234,將他們分別撕開后,產生了標號分別為 1234 的兩套(半張)撲克牌,疊在一起后形成了從上至下標號分別為 12341234 的撲克牌堆。
步驟二
此時我們可以注意到,無論我們將牌堆頂的多少張牌移到堆底,得到的撲克牌堆編號(IT之家注:從上至下)都只會有以下幾種結果:
12341234(名字字數被四整除)
23412341(名字字數模四余一)
34123412(名字字數模四余二)
41234123(名字字數模四余三)
觀察以上可能的牌堆,我們可以發(fā)現產生的牌堆都具有以下性質:
1. 前四張牌和后四張牌的順序完全一樣
2. 前四張牌和后四張牌分別是 1234 的一個輪換
步驟三
從這一步開始,我們只考慮當前牌堆中排在第四及第八的兩張牌,記為 X,其他牌記為 0。那么根據上一步的討論,可以得到當前的牌堆形如:000X000X。
將前三張放在牌堆中間后,無論這三張放在什么位置,最終產生的牌堆都將是:X000000X。
于是乎,被選擇的用于配對的牌就將是 X,而另一張與之配對的牌(稱為目標牌)將位于牌堆底。
步驟四
在上一步之后,牌堆的編號為 000000X,于是,無論本輪中選擇牌堆頂多少張牌插入牌堆中,都不會影響目標牌的位置,仍然處于牌堆底部。
步驟五
此時男生的牌堆為:00000X。女生的牌堆為:0000X。
步驟六
通過嘗試可知,在經過步驟六后將得到如下的牌堆:
男生:0000X0
女生:00X00
步驟七
到此,便完成劉謙本次魔術的步驟揭秘,北京大學進一步解釋稱這其實是一個“約瑟夫問題”:
設有編號為 1,2,……,n 的 n 個人圍成一個圈,從第 1 個人開始報數,報到 m 時停止報數,報 m 的人出圈。再從他的下一個人起重新報數,報到 m 時停止報數,報 m 的出圈...... 按照這個規(guī)則進行下來,直到所有人全部出圈為止。求最后留下來的人編號。
為了使問題簡化,我們考慮 n 個人編號為 0 ~ n-1 的情況,每 m 個人退出一個人,我們稱之為(n,m)問題。第一個人(即編號為在模 n 下同余 m 的人)退出之后,對剩下的 n-1 個人重新編號,則新問題的 k 號在原問題中對應 k+m 號。因此(n, m)問題的解 J (n, m) = J (n-1, m)+m 且 J (1, m) = 1(模 n 意義下)。據此,通過遞推的方法可以得到 J (n, m)。在實踐中,約瑟夫問題一般用代碼進行求解。劉謙的魔術中使用的便是 m=2 的特殊情況。
廣告聲明:文內含有的對外跳轉鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結果僅供參考,IT之家所有文章均包含本聲明。