趣題:由0和1構成的蟲子

問題摘自:http://www.cs.cmu.edu/puzzle/puzzle37.html

A long worm crawls into a cosmetic veterinary surgery, complaining of a problem with 1's. 
A worm can be thought of as a string of 0's and 1's and the most beautiful worm is 00000 ... 0. The worm is a sequence of segments and there is a 0 or a 1 on each segment. The procedure for removing 1's is complicated. If there is a 1 at the right hand end (where the tail is), then the surgeon can remove this 1 (and the segment it lies on) and place a new segment with 0 or a 1 at the left hand end (where the head is).
If however there is a 0 at the right hand end then the surgeon can remove it, but he has no control over what appears on the new segment at the left hand end. Indeed, the surgeon has to operate under the assumption that there is an adversary making a choice of what to replace a 0 by.
The adversary would like the operation to continue indefinitely. The surgeon claims a 100% success rate. Do you believe him?

有一條蟲子,它的整個身體由 n 節構成,每一節要麼是有瑕疵的 1 ,要麼是沒有瑕疵的 0 ,因而整個蟲子的身體結構就可以用一個 n 位 01 串來表示。你的目標是把整個蟲子變成 000...00 的完美形式。每一次,你可以砍掉蟲子最右側的一節,同時蟲子會在最左側長出新的一節,以保持蟲子的總長度不變。如果你砍掉的是一個 1 ,那麼你可以指定蟲子在最左側長出的是 1 還是 0 ;但如果你砍掉的是一個 0 ,那麼你無法控制蟲子會在最左側長出什麼——它可能會長出 0 ,也可能會長出 1 ,因而你不得不假定,概率總是會和你做對,上天會竭盡全力地阻撓你。我們的問題是:不管蟲子的初始狀態是什麼,你總能保證在有限步之內讓蟲子變成 000...00 嗎?
注意,這個問題可能沒有你想的那麼簡單。顯然,我們必須得把一些 1 變成 0 ,這樣才能讓 1 的數目逐漸減少並最終消失。但是,如果只是簡單地每次都把 1 變成 0 ,最終也不見得就一定能取勝。比如,如果這條蟲子是 101 ,那麼去掉最右邊的 1 並選擇在左邊長出一個 0 ,蟲子會變成 010 ;再把 010 右邊的 0 去掉後,如果不巧左邊長出的是 1 ,那麼整條蟲子又會回到 101 的狀態。如此反覆,將永遠也不能得到 000 。而更加聰明的方法則是先把 101 變成 110 ,下一步蟲子將會變成 111 或者 011 ,不管是哪種情況,接下來只需要逐個把 1 變成 0 就能獲勝了。運用恰當的策略才能走到終點,這無疑讓問題變得更加有趣。
不管蟲子一開始是什麼樣子的,我們總能夠在有限步之內獲勝。下面是 Peter Winkler 給出的證明。讓我們把連續 n 次操作視爲一輪操作,因而完成一輪操作正好讓蟲子的整個身體更新一次。於是,每一輪操作實際上相當於是從右到左依次考慮蟲子的每一位,每遇到一個 1 時你都可以選擇是否把它修改成 0 ,每遇到一個 0 時它都會隨機地被修改成 1 。我們一輪一輪地改造蟲子的身體,並且每一輪都採取這樣的策略:從最右端開始,每次遇到 1 都把它改成 0 ,直到第一次有 0 被改成 1 ;在此之後,不管新遇到的 0 變沒變,都保留所有的 1 不變。如果這一輪下來後,沒有 0 被改成 1 ,那麼我們將會把所有的 1 都替換成 0 ,從而得到 000...00 的形式,直接獲得勝利;如果途中有 0 被改成了 1 ,那麼整個蟲子作爲一個二進制數將會嚴格增加。每經過一輪後,只要蟲子沒有變成 000...00 ,整個二進制數都會變得更大,最終將會變成 111...11 的形式,此時再也不會有 0 變成 1 了,於是按照我們的策略,在下一輪中,所有的 1 都會變成 0 ,從而獲得勝利。


解題思路摘自:http://www.matrix67.com/blog/archives/5063

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章