標籤:style blog http color 使用 strong
時間要追溯到2013年9月,我看到過這樣一個有趣的問題,來源於matrix67的一篇博文。
那麼把題目摘錄一下:
“ 經典 Geek 動畫 Futurama 上周播出了第 6 季的第 10 集 The Prisoner of Benda 。在這一集中,教授 Farnsworth 發明了一種“心靈對換機”,它可以把兩個人的思想互相對換,使得 A 的大腦跑進 B 的身體裡,而 B 的大腦則跑到 A 的身體裡。 Farnsworth 和 Amy 都想得到對方的身體,便成為了這台機器的第一對實驗者。等到他們爽夠了想換回來後, Farnsworth 卻發現了一個嚴重的問題:已經互換過大腦的兩個身體不能再次進行大腦對換操作。但這並不表示兩個人完全沒有希望回到自己的身體裡—— Farnsworth 突然想到,或許可以用第三者作為一個臨時的大腦儲存空間,從而實現間接對換。正巧機器人 Bender 進了實驗室,於是(身為 Amy 的) Farnsworth 和 Bender 又坐上了機器,這下 Farnsworth 的大腦便跑到 Bender 身體裡了,而 Bender 的大腦則進了 Amy 的身體裡。此時 Farnsworth 才意識到,引入一個第三者是不夠的——再讓(身為 Bender 的) Farnsworth 和(身為 Farnsworth 的) Amy 互換大腦,可以讓 Farnsworth 恢複原狀,但同時 Amy 的大腦會跑到 Bender 的身體裡去;這樣 Bender 和 Amy 的身體正好顛倒了,而他們卻已不能再次使用機器。換句話說,要想恢複兩個換位了的大腦,需要引入不止一個新的人。
但現在,問題已經變得更加複雜了——這下已經產生了三個大腦位置錯亂的人。大家很容易聯想到一個更一般的問題:給定 n 個人以及他們之前使用“心靈對換機”的記錄,至少得引入多少個新的人,才能讓所有人的大腦都“物歸原主”呢?”
條件需要注意的是:n個人兩兩之間可能都已經換過了,所以後續的交換隻能在新人和舊人,新人和新人之間互換。
在原先的文章裡,最後給出的解答是這樣的:
無論此前n個人的交換有多混亂,最後只需要引入兩個人,可以讓大家複原。
軀體:1 2 3 4 5 6 … k-1 k
大腦:2 3 4 5 6 7 … k 1
首先解答這樣一種特殊的情況
在2 3 4 5 6 … k 1 的情況下,可以通過一種構造性的置換方法
2 3 4 5 6 … k 1 x y
x 3 4 5 6 … k 1 2 y
x y 4 5 6 … k 1 2 3
x y 3 5 6 … k 1 2 4
x y 3 4 6 … k 1 2 5
x y 3 4 5 … k 1 2 6
… … …
x y 3 4 5 … k-1 1 2 k
x y 3 4 5 … k-1 k 2 1
x 2 3 4 5 … k-1 k y 1
1 2 3 4 5 … k-1 k y x
1 2 3 4 5 … k-1 k x y
但是如何面對一般的情形呢?
原文是這樣解釋的:
“注意到一個 1 到 n 的排列總能分解成若干個迴圈的乘積,對每個迴圈分別進行上述操作 ”
我覺得這句話並沒有把這個解答解釋得比較充分,讓人不太明白,這是這篇文章比較遺憾的地方。
下面說一下我的思考吧
首先,引入這樣一個問題。
一個排列,每個數字i都不在第i個位置上,需要多少次交換,才能變換到1,2,3, ..., n-1, n
例如排列 2 4 1 3,最少需要3次交換。排列 2 1 4 3則只需要2次交換。
因為前者{1,2,3,4}構成了一個全亂環,後者{1,2} {3, 4}構成了2個全亂環(額...全亂環,姑且這麼描述吧,暫時沒找到正規俗語-_-||)。
排列 1 3 4 2不是我們考慮的情形,因為1在第1個位置。
在一個大小為n的完全亂序環中,最少需要n-1次交換,才能還原。
我們暫時考慮這樣的排列:每個數字i都不在排列的第i個位置上,並且需要通過n-1次交換才能還原到1 2 3 4 ... n-1 n
如果只引入一個人x,策略是依次把1,2,3,4心靈換到身體上(紅色表示舊人和新人已經做過交換)
2 4 1 3 x
2 4 x 3 1
1 4 x 3 2
1 2 x 3 4
1 2 x 4 3
好,到這裡比較尷尬了,因為第一次5號身體和3號已經換過了所以不能再換了
怎麼辦?
那麼只好引入第2個救星了y。他的作用是先和裝有1號心靈的身體互換,避免x最後無法交換的困境
2 4 1 3 x y
2 4 y 3 x 1
x 4 y 3 2 1
x 2 y 3 4 1
x 2 y 4 3 1
只有x一個人時的困境不再了,3可以和y交換了
x 2 3 4 y 1
1 2 3 4 y x
1 2 3 4 x y
總之,解決的辦法就是:
1)y先和1號心靈交換,
2)然後由x的身體把2,3,4,... n按照心靈的順序各歸其位,
3)再由y的身體把1號歸位,
4)最後x y互換。
於是,各歸其位,世界和平了。 :D
等等,我們剛才說了排列中只有一個全亂環的情況,如果有多個全亂環呢?
其實很簡單,對每一個全亂環都用上述的方法單獨處理就行了。