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