
□編著/余般石
□提示撰寫/劉一哲
瓊斯上尉對著他疲憊不堪的七名部下說:“我們中間出了一個奸細,我們必須把他除掉!”
特種兵小隊自從進入叢林以來,處處受阻,進展很不順利,已經有四位兄弟陣亡?,F在只剩下八個人,大家都已經到了崩潰的邊緣。聽到瓊斯隊長突然這么說,大家都很詫異:“那么他是誰呢?奸細又不會自己承認。”
上尉冷冷地一笑:“雖然我不知道他是誰,但上帝一定知道。而且,上帝很樂意指明誰是告密者!上帝告訴我一個方法,很快就能把奸細找出來。”
上尉說:“從我開始是1號,以順時針的方向,2號是費舍,3號是加里,依此類推是哈維、伊恩、卡爾、李、馬休,大家站成一個圈子。上帝給我兩顆骰子,我同時將兩顆骰子擲出,看擲出的是幾點,把兩個點數加起來,記住這個數,并一直按這個數數下去。從我開始以順時針方向數起,每當數到這個點數時,這個人就離開,然后繼續,再有一個人離開……直到剩下最后一個人,那么這個人就是清白的。然后再擲,我們再用這個方法鑒別出下一個清白者——直到七個清白者都被鑒定出來,剩下的那個就是叛徒,我們要處決他!”
“你瘋了?”副隊長費舍中尉喊道,“怎么能開這種玩笑?”
隊長很堅定地說:“我沒開玩笑。不這樣大伙兒都得死!現在說不定只死一個,其他的七個人都能活下去!”
馬休問:“被上帝證明是清白的人就不必繼續參加這個游戲了吧?”
隊長回答說:“不,他還是要參加,因為清白者有義務為其他的清白者作證?!?/p>
其他人默默無語,游戲就這樣開始了。但沒有人知道,隊長早有預謀:站在某個位置上是必死的,因為他已經懷疑到其中一個人了。那么請問:隊長懷疑誰是奸細?
(方華摘自《國內外數學趣題集錦》,上??萍冀逃霭嫔纾?/p>
提示:
這道題是所謂的約瑟夫斯問題的變形。
約瑟夫斯是公元一世紀的猶太歷史學家,他領導了反抗羅馬帝國的武裝起義,但是失敗了。彈盡糧絕之時,他和四十名猶太士兵被困在一個山洞里。這四十名猶太勇士寧死不屈,決定殺身成仁,但約瑟夫斯卻另有想法。
于是,他對四十個同伴說:“上帝是不允許自殺的。但我這里有一個不用自殺又可以殉國的方式——我們大家圍成一個圓圈,從某個人開始,一二三一二三地數,凡是數到三的人,就由旁邊的人成全他,讓他升天,直到剩下最后一個人。雖然這個人仍然要自殺,但總比大家都自殺要好得多?!?/p>
一心赴死的猶太士兵當然不會反對,于是便隨便指了一個人開始,反正都是要死,誰先死已經不再重要了。約瑟夫斯有意地站在了31號的位置上,結果他就是剩下的那個人,他沒有選擇自殺,而是投降了羅馬人,作為事件的記錄者活了下去。
而這道題中,隊長要找出七個“約瑟夫斯”,把另外那個“倒霉鬼”干掉。
這類問題,初看很簡單,但實際上卻涉及到一些讓人腦感到棘手的問題,直到發明了計算機,這類問題在計算上的障礙才得以解除。而現在,約瑟夫斯問題已經成為計算機編程的典型練習題。想知道人腦和電腦的區別在哪里嗎?來看看這道題吧。
首先我們復習兩個概念。
第一個是整除求余數,數學符號是mod。如果你覺得用字母眼暈,也不要緊,反正不是正式場合,我們可以換個符號,比如“→”;如果你不介意自己的英語有口音,也可以把它稱為“貓的”。舉個例子: 4÷5=0余4,則4貓的5就等于4。6÷4=1余2,則6→4=2。
第二個概念是映射,說白了就是一個蘿卜對著一個坑,我們要往坑里填蘿卜。
概念介紹完,我們不妨試做一下。八個人,假設我們投出骰子點數和是10。那么2號首先出局,用算式表示就是10→8=2。
然后剩下的七個人重新排隊,最初8個蘿卜各司其位,號碼數與坑號相同,現在2號被剔除,那么3號蘿卜要栽進2號坑、4號蘿卜栽進3號坑……一直到8號蘿卜占上7號坑,8號坑空著。這時你就會發現一個蘿卜一個坑的好處,不然很容易搞亂。
這時開始第二輪挑選,我們要從2號坑開始數(現在里面裝的是3號蘿卜)再數10個,結果好像應該是(2+10)→7=5,可是如果一個一個查,查到的明明是4號坑。哈哈,出問題了吧,我們退回第一步,10→8=2那里,結果雖然正確,但實際上省略了兩個步驟——我們沒有考慮從哪個人開始查。我們從第一個人開始查,查“到”第10個,所以實際經過了9個,是(1+10-1)→8=2,所以第一輪結果雖然是正確的,但用做通項就不行了。這個問題雖然簡單,但確實有很多人查數時會犯這種錯誤。
所以第二輪正確的式子應該是 (2+10-1)→7=4。
4號坑,栽的是5號蘿卜。
這時你會發現,我們數的不是蘿卜號,而是填滿的坑;算式里說的也不是蘿卜號,而是填滿的坑號。有時候結果會出現0,但聰明的你應該會知道,余0就是整除,那么坑號當然就是該輪的倒數第一個坑。
剩下的6個人再重新排序——1號不變;3號進2坑;4號進3坑;6號進4坑;7號進5坑;8號進6坑。第三輪從4號坑開始數,得出的算式是(4+10-1)→6=1,1號坑,是原裝的1號蘿卜,那么1號又被挑了出去。
接下來,剩了5個人,分別是3號、4號、6號、7號、8號。重新排序,不難算出,先后出局的分別是8、4、6、3,剩下的是7號。
當骰子擲出10的時候,7號被“證明”是清白的。
還要繼續用這個方法找出其他的“約瑟夫斯”嗎?不必了吧,因為你也該發現了,重新排序是多么讓人抓狂的事。這是電腦的算法,因為在電腦計算中,給坑里插蘿卜卻是最簡單不過的——電腦的儲存空間和計算頻率要遠遠大于人腦,而且電腦不會因重復同樣的過程而感到厭煩。
人腦的優勢就完全不同。人腦適合于直觀的感覺,并且富于創造性——至今都沒有哪臺電腦能下好圍棋,也沒有哪臺電腦能聽出什么叫諷刺。
這里有種更適合人腦的求值方法:拿一張紙,畫上8×20的格子,每行保證8個格,行數則多多益善,如果20行不夠,還可以繼續添加。然后一行一行往里填數,比如1、2、3……填到10的時候,把這個格子涂黑,這個格子對應的是2號,那么把2號這一豎列都涂黑【圖1】,然后繼續填,1、2、3、4……遇到黑格子就跳過去,又數到10,再涂黑【圖2】,然后把這一列也都涂黑;重復這個過程,最后當你發現只剩一列格子沒有涂黑了,恭喜你,這列格子的號碼就是你要的答案!【圖3】
這種方法直觀得令人發指,不需要計算,也不需要公式,直接拿眼睛看就行了。雖說這種涂格子要比計算機算法計算量大,但它卻絕對比計算機算法容易理解。
越好學的方法越難用,越難理解的方法計算越方便!這種現象已經滲透到生活的各個領域,比如五筆和拼音輸入法之爭,蘇式武器和美式武器之爭。雙方各有各的優勢,當你要采集你所需的復雜信息時,總不可能一切如你所愿,不是把成本花在學習方法上,就是把成本花在煩瑣的計算上。
死亡游戲已經開始,你能幫瓊斯隊長把那個嫌疑人找出來嗎?