這個細節,連主考官都沒有發現。
評測系統只關心最終結果,不會去分析程式碼中每一個引數的來源。
但索科洛夫分析了。
他把陸沉的程式碼一行行拆開,在腦子裡重新執行了一遍,找到了那個隱藏在矩陣組裝過程中的微小偏移量。
“那個偏移量的取值。”索科洛夫說,“不是試出來的。是根據係數矩陣的譜分佈計算出來的。但問題是——”
他身體微微前傾。
“要計算譜分佈,需要先知道矩陣特徵值的大致範圍。而你沒有做特徵值估計這一步。你的程式碼裡,沒有。”
“所以我想知道。”索科洛夫的聲音壓得更低了,“你是怎麼知道那個偏移量的最優取值的?”
房間裡安靜了很久。
雨聲從窗外傳進來,細密而持續。
陸沉看著索科洛夫。
這個蘇聯電腦科學家,比他想像的更敏銳。不是那種被天才光環震撼後只會驚歎的觀眾。是一個真正懂得程式碼、懂得演算法、懂得數學底層邏輯的人。
是一個真正的對手。
“我推導過。”陸沉最終說。
“推導過什麼?”
“預條件子的譜分佈,不完整分解相當於對原矩陣做了一個近似變換。這個變換後的矩陣,其特徵值會聚集在某個區間內,我推導了這個區間的上下界。”
索科洛夫的瞳孔微微收縮。
“你推導了不完整Cholesky分解的譜界?”
“對。”
“什麼時候?”
“來莫斯科之前。”
索科洛夫沉默了。
他靠在椅背上,手指無意識地敲著《數值分析導論》的封面。
譜界問題。
這是預條件技術中最核心的理論難題。為什麼預條件子能加速收斂?加速多少?這些問題的答案,都依賴於對預條件後矩陣特徵值分佈的精確刻畫。
在1989年,只有少數幾個特殊情況的譜界被證明過。
而陸沉說,他推導了一般情況。
“可以讓我看看嗎?”索科洛夫問。
他的語氣變了。
不再是審視,不再是試探。
是請求。
陸沉想了想,從床頭拿起一本筆記本,翻到某一頁,遞給索科洛夫。
索科洛夫接過,開始閱讀。
他的閱讀速度很快。但讀到第二頁時,速度慢下來了。
讀到第三頁時,他開始往回翻,重新看前面的推導步驟。
讀到第五頁時,他停下了。
“這裡。”他指向一個公式,“從預條件矩陣的Rayleigh商出發,你引入了一個加權範數。這個構造——”
“是為了把非對稱問題對稱化。”陸沉說,“不完整分解後的矩陣不再對稱,但可以用能量內積恢復對稱性。”
索科洛夫盯著那個公式看了很久。
然後他把筆記本合上,還給陸沉。
“這個推導。”他說,“如果發表,會改變整個數值代數的研究方向。”
他的聲音很平靜,但握著筆記本的手指節發白。
“你不會發表的。”索科洛夫又說,“至少現在不會。”
這不是疑問句。
陸沉沒有否認。
索科洛夫站起身,走到窗邊,看著外面的雨。
“1965年,我參與BESM-6的架構設計時,最讓我頭疼的不是硬體,是演算法。”他說,“我們造出了每秒百萬次咚愕臋C器,卻沒有足夠好的演算法把它餵飽,解一個大型線性方程組,百分之九十的時間耗在無效迭代上。”
他轉過身,看著陸沉。
“後來我開始研究計算複雜性理論。我想知道,一個問題的難度,究竟有多少是問題本身的,有多少是演算法不夠好造成的。”
“結論呢?”陸沉問。
“結論是,”索科洛夫說,“大多數時候,是我們不夠聰明。”
兩人對視。
一個四十七歲的蘇聯科學家,和一個十歲的中國少年。
在這間狹小的宿舍裡,某種跨越年齡、跨越國界、跨越時代的理解,無聲地建立起來。
“下一代架構。”索科洛夫忽然換了話題,“我在斯捷克洛夫研究所的團隊,正在設計一種新的計算機體系。不是單純的電晶體堆疊。是從指令級並行開始,重新思考計算的本質。”
“Elbrus。”陸沉說。
索科洛夫的眼睛亮了一瞬。
“你知道這個名字?”
“聽說過。”陸沉說,“厄爾布魯士山,歐洲最高峰。”
索科