求解釋《哈利波特與理性之道》裡面時間轉換器的實驗?

【原文如下,求大神解釋這到底是怎麼回事?】

「勞駕幫我個忙好嗎?」 哈利說道。他一邊說一邊翻看目錄,找到了印著前一萬個質數的那一頁,翻到那一頁,把書塞進安東尼·戈德斯坦的手裡。「在這
張表上選兩個三位數。不要告訴我你選的是什麼。請你把這兩個數乘起來,然後告訴我乘積是多少。哦,還有請你驗算一遍好嗎?請一定保證結果是對的,如果你乘
錯了的話,我不知道我或者這個宇宙會發生什麼事。」

安東尼既沒有問「你忽然發什麼神經?」 ,也沒有問「聽起來好奇怪,你要這個幹什麼?」 或者 「你是什麼意思,你不知道這個宇宙會發生什麼事?」 這幾天在宿舍里大家過的是什麼日子就可想而知了。

安東尼默默地接過書,拿出筆和一張羊皮紙。哈利轉過身,閉上眼睛,以保證他什麼也看不見,急得在原地亂跳。他的手裡拿著便箋本和自動鉛筆,準備把結果抄下來。

「好了,」 安東尼說道,「十八萬一千四百二十九。」

哈利寫下181,429。他重複了一遍抄下來的數字,安東尼確認無誤。

哈利沖回箱子里的地下室,看了一眼手錶(手錶上顯示出4:28,也就是7:28),閉上眼睛。

大約三十秒鐘以後,哈利聽見了腳步聲,接著是地下室的門關上的聲音。(哈利不用擔心會窒息。如果你願意買一個真正高級的箱子的話,空氣自動流通法術是包括在內的。魔法不是很厲害嗎,你根本不必操心付電費的事。)

哈利睜開眼睛的時候,他看到了自己想要的東西,地板上有一張折好的紙,是來自未來的自己的禮物。

把這張紙叫做「紙-2」。

哈利從他的便箋本上撕下一張紙。

把這張紙叫做「紙-1」。當然,這是同一張紙。如果你仔細看的話,你會發現在撕下的地方不規則的邊緣形狀是一樣的。

哈利在心裡複習了一遍他的演算法。

如果哈利在打開「紙-2」的時候發現它是空白的,他就在「紙-1」上寫下「101 x 101」,折好,學習一個小時,回到過去,放下「紙-1」(這時「紙-1」會變成「紙-2」),從箱子里的地下室出來,和大家一起去吃早飯。

如果哈利在打開「紙-2」的時候發現上面寫了兩個數字,他就把它們乘起來。

如果這兩個數的乘積等於181,429,哈利就把這兩個數字抄在「紙-1」上,把「紙-1」送回過去。

否則哈利就把右邊的數字加2,把新的兩個數寫在「紙-1」上。除非右邊的數字在加2之後大於997,這時哈利會把左邊的數字加2,把右邊的數字改成101。

如果「紙-2」上寫的是 997 x 997, 哈利就讓「紙-1」空白。

在這種情況下,唯一穩定的時間迴環就是「紙-2」上寫的是181,429的兩個質數因子。

如果這個實驗成功的話,哈利可以用同樣的技巧得到任何容易驗證卻很難找到的答案。這不僅證明在時間轉換器存在的情況下P=NP,[1]它還有更強的
普遍性。哈利可以利用這個技巧打開所有的數字鎖,解開任何密碼。說不定還能用它找到斯萊特林的密室,只要哈利能找到系統的方法列出霍格沃茨的所有地點就行
了。即使以哈利的標準,這也要算非常精彩的作弊了。

哈利用發抖的手拾起「紙-2」,打開了。

「紙-2」用略微發抖的筆跡寫道:

不要和時間胡鬧

哈利用略微發抖的筆跡在「紙-1」上寫下「不要和時間胡鬧」,整齊地折好,決心在十五歲之前都不再做什麼真正絕妙的實驗了。

就哈利所知,這要算整個科學歷史上最嚇人的實驗結果了。

在之後的一小時里哈利幾乎無法靜下心來看書。

哈利的星期四就是這樣開始的。


這個問題我理解了,這是MOR裡面非常精彩的一小節,但我不知道能不能用我的語言給你解釋清楚…

假定你有時間轉換器,你已經下定決心做某件事。時間轉換器可以固定讓你回到1小時前。

我們先來考慮實驗1,此刻假定為9:00,你閉上雙眼,決定9:01的時候從你的本子上撕下來一張白紙,然後10:00時發動時間轉換器,把這張撕下來的白紙送回9:00,閃人。

那麼,你有了這個念頭,睜開雙眼之後,應該會發現面前出現了一張白紙(白紙b)。接下來,如果你老老實實的在9:01時從筆記本上撕下一張白紙(白紙a),並且在10:00時把它送回一小時前,那麼時間運行正常。而且,儘管你9:01時是在筆記本上隨手撕下來的一張白紙,你會發現它居然和9:00時出現在你面前的白紙b形狀一模一樣。這個可以理解吧?

接下來我們考慮實驗2,我現在閉上雙眼,決定9:01的時候從本子上撕下來一張白紙(白紙a),然後在白紙(白紙a)後面,根據一定的規則,寫上一個0-10之間的數字(具體寫哪個數字看後文規則),接下來把它在10:00時傳回到9:00。此刻我如果睜開雙眼,應該發現面前出現一張白紙(白紙b),上面寫著一個數字。我選數字的【規則】是這樣的:【如果白紙b上出現的數字是x,那麼我就在白紙a上寫10-X的結果;比如假設白紙b上出現的數字是3,我就在白紙a上寫下7,因為10-3=7。】

好了,現在我睜開雙眼,白紙b上會出現什麼數字?我想【應該】是5,為什麼呢?因為在我設立的規則上,白紙只有寫上5,才能保證時間迴路穩定(也就是白紙a和白紙b上的數字一模一樣),這一點題主能不能理解?

然後呢,我們變形一下這個問題,問題本身在問2X=10的答案是多少(假定我很笨,不會做乘除,只會做加減-也就是驗算10-3=7這種程度),那麼白紙上出現5,就一次到位的告訴了我們X=5

————————————————————————————————

現在哈利要通過這個漏洞,做實驗3了,在這之前我們先簡單了解一下質因數分解這個問題。給定一個大數字,告訴你它是兩個質數的乘積,讓你找出這兩個質數,這個問題我們並沒有一個很快捷的(多項式時間)演算法找到那兩個質數(這也是現代社會很多加密演算法的基本原理),但如果我給你兩個質數(或者兩個奇數),讓你驗證,這兩個數的乘積是否等於那個大數字,那我們可以很快的得出『是/否』的答案。

哈利是這樣想的,已知181429是兩個三位數的質數(或者說,奇數)的乘積,那換句話說,這兩個質數必然在101*101, 101*103, ..., 101*997 (注,999顯然不是質數因此被忽略了), 103 * 101, 103 * 103, ... 103 * 997, ..., ..., 997 * 997之中,這個可以理解吧?(相當於哈利把所有可能性排了一個【隊列】)

哈利於是給自己心裡立下了這麼一條規則:

如果我發現白紙b上是空的,那麼我就在白紙a上寫下第一種可能性(101*101)。

如果我發現白紙b上出現了兩個奇數,那麼我驗算它們的乘積是否等於181429(注意,驗算是很簡單的),如果乘積的確等於181429,那麼我就在白紙a上原樣寫下這兩個奇數,否則的話,我在白紙a上,寫下下一個可能性(也就是隊列中的下一個位置,換句話說,如果我在白紙b上發現數字是573, 129,驗算髮現不對後,我應該寫下573, 131)

這個規則能看明白吧?

那麼,在這個規則下,你睜開雙眼,白紙b上應該出現什麼數字?按照哈利的規則,只有正確答案(也就是那兩個正確的質數因子)才能保證穩定的時間迴環。

如果是這樣的話,答案到底是誰算出來的呢?(在這種假想情況下,我個人有個強行解釋,就是說產生了很多個平行宇宙or可能性(數目和【隊列】的總長度一樣多),然後那些不滿足穩定時間迴路的宇宙都毀滅了)

哈利已經打算把這個漏洞應用到很多其他地方,比如說,找出霍格沃茨里的任意一件東西。我們不妨用來找一個名字叫A的同學,我們不知道這個A的詳細情報,但知道他是霍格沃茨四個學院里的某個一年級到六年級的學生(列出隊列),哈利只需要寫『格蘭芬多,1年級』,『格蘭芬多,2年級』……『斯萊特林,6年級』,然後每次跑去紙b對應的年級去問,A是不是他們同年級的學生,如果是的話,在紙a上寫下正確答案,如果不是的話,那麼在紙a上寫下一個年級,這樣,為了構造穩定的時間迴路,紙b上只能出現A同學的正確年級和學院,諸如此類。

——————————————————————————

但是,當哈利睜開眼時,看到的紙b上是他的筆跡,但不在他預先設定的規則中的一句話:「不要和時間開玩笑」,哈利害怕了,於是老老實實的在紙a上寫下「不要和時間開玩笑」,當然,這樣也保持了時間迴路穩定……但這句話最初是出自誰的思想呢?顯然不是哈利。我們不妨把它叫做大宇宙意志。

哈利自身擁有自由意志嗎?他自身會思考他自身是否擁有自由意志嗎?還是大宇宙意志的傀儡?(我們讀者知道他沒有,他是一部同人小說里的人物)

當你看到來自未來的紙b上,出現的是數字5,你到底有沒有自由意志來決定在紙a上寫下一個不同的數字(比如6)?這樣會導致時間迴路不穩定。

需要注意的是,當哈利看到那段字樣『不要和時間開玩笑』時,已經註定了他必然會被這句話所說服。如果哈利是一個不能被簡短一句話說服的人,那白紙b上就絕對不會出現這句話,可能會是他自己筆跡寫下來的更複雜的話,比如「老實點,把這段話照抄一遍,不要和我自己以及大宇宙意志開玩笑,我知道你小學時給自己設下來的密碼是啥啥啥,我知道爸爸如何如何,我知道媽媽如何如何」……等等很長的句子,而且能保證哈利被說服的話語(當然這個句子能不能說服哈利全是作者的設定)

————————————————————————

我對這個問題的理解就是這麼多,而且我相當確定我應該理解了作者表達的含義,就是不知道我有沒描述準確。

————————————————————————

04-12: 稍作補充,這段實驗是HPMOR的第十七章時發生的事。在第十四章哈利從麥格那裡拿到時間轉換器時,哈利發出了這樣的感嘆:

「變成一隻貓和這個根本沒法比。你知道直到目前為止我一直都有一個可怕的想法,覺得這一切只剩下一個合理的解釋,也就是我的整個宇宙像《模擬幻影-3》一樣是一個電腦模擬程序,[5]可是如今連這種可能性都排除了,因為這個小玩意兒不可圖靈計算!圖靈機可以回到過去的某一點,重算一個不同的未來,預言機可以依靠其他的機器來解決停機問題,可是你剛才說的是,現實能以一種自洽的方式一遍算完,用的是……還沒有發生過的信息……」

這段實驗就是為了驗證最後一點(並用來做很好玩的事情),我覺得可以轉述為,哈利試圖利用時間轉換器,構造出超越圖靈機計算能力的演算法模型。儘管理論上沒有錯誤(現實本身就在以自洽的方式一遍算完,撕下的白紙b的形狀和白紙a的形狀從原子層面(假定撕下來的白紙不會因為時間發生變化)一模一樣,放進過去的自己的口袋的隱形衣也必然存在『現在』的自己的口袋中),但由於未知的原因,演算法模型構造失敗了。


哈利要解決的是一個數學問題:大數分解。即已知一個大數,把它拆成兩個差不多大的質因數的乘積。

大數分解在現實生活中屬於一個NP問題,需要花相當長的時間。一些加密演算法就是基於這個事實來設計的,例如RSA加密演算法。

拿書中的例子來說,我們已知一個數N,是由兩個未知三位數相乘得到的。為了找到這兩個三位數到底是什麼,我們只有從101 x 101開始猜測,每次把其中一個因數加二,然後去驗證它們的乘積,直到等於N,這樣才找到了這兩個三位數。

但是有時間轉換器的話,你可以像哈利一樣,給某一個時間點的自己送一張紙條,上面寫著一個猜測,如果這個猜測是正確的,那麼你就得到了答案。如果這個猜測是錯誤的,那麼你就寫出另一個猜測,把這個猜測送回到同一個時間點,以此類推。這樣實際上形成了一個時間的遞歸,讓你可以得到正確的解。

這個實驗的意義作者也寫的很明白了:「如果這個實驗成功的話,哈利可以用同樣的技巧得到任何容易驗證卻很難找到的答案。這不僅證明在時間轉換器存在的情況下P=NP,它還有更強的普遍性。哈利可以利用這個技巧打開所有的數字鎖,解開任何密碼。」

補充一句,雖然作者本職工作是搞AI的,自然而然會想到拿用時間遞歸去解決NP問題,但以這種腦洞來寫同人小說也太nerdy了……

延伸閱讀:

1. 整數分解:https://zh.wikipedia.org/wiki/整數分解

2. RSA加密演算法:https://zh.wikipedia.org/wiki/RSA加密演演算法

3. 什麼是P問題、NP問題和NPC問題:http://www.matrix67.com/blog/archives/105


哈利只是試了他認為最難的一個問題而已。

這個問題可以簡化

保險箱密碼只能試有限次,你有紙筆和時間轉換器

則:

哈利1號先在紙1號上寫00001(假設是5位),

回到過去放紙1號(寫著00001)

哈利2號拿到紙1號,試驗密碼

不對,於是在紙2號上寫00002

回到過去放紙(此時紙上寫著00002)

哈利3號拿到紙2號,試驗密碼。。循環

哈利N號拿到紙N-1號,試驗密碼

對了。

從外部觀察來看就是哈利直接拿到一張寫著正確密碼的紙。

保險箱密碼可以換成任何易於驗證而難於計算的,答案數量有限(不管答案有多少種,只要不是正無窮就行)的問題。


這看起來像某種邪惡的量子演算法。


推薦閱讀:

哈利波特與伏地魔的最後一戰是否打得不夠精彩,為什麼?
神奇動物在哪裡的默然者是什麼?
莉莉是美女嗎?
羅琳在英國文學中的地位?

TAG:數學 | 物理學 | 哈利·波特 |