
自計算機科學誕生之初,雜湊表(Hash Table)便被奉為基石型資料結構,地位毋庸置疑 ~

雜湊表的應用之廣泛,無需贅言。
從誕生至今,它一直是現代計算系統的基石,資料庫管理系統、網路路由裝置,乃至程式語言底層實現,無不依賴於雜湊表。
然而,最近,雜湊表最具影響力的猜想——姚期智四十年前提出的理論,竟被一名本科生意外顛覆!
1985 年,計算機科學泰斗、圖靈獎得主姚期智教授曾經在《Uniform Hashing is Optimal》論文中提出一個影響深遠的猜想:

在開放定址雜湊表中,均勻探測 (uniform probing) 通常被認為是解決衝突、定位目標元素或空槽位的最佳方法。然而,在最壞情況下,當雜湊表負載較高(負載係數為 x)時,查詢時間的下界將線性增長,與 x 成正比。由此可見,對於特定型別的雜湊表,在接近飽和狀態下,執行插入或查詢操作的平均時間複雜度會隨著負載係數(Load Factor,定義為已使用空間與總空間的比例,例如高達 99%、99.9% 甚至更高)的增加而顯著提升,每次操作都需要“探測”更多位置才能完成。。

姚期智老師的這一理論推斷在過去四十年間被廣泛接受,成為雜湊表效能分析的經典範式。
但是本科生 Krapivin(克拉皮文)團隊的研究表明,對於非貪婪的雜湊表,這個限制並不存在:
他們設計出一種非貪婪雜湊表,其平均查詢時間竟然可以達到常數級別!也就是說,平均查詢時間不再受雜湊表填充程度的影響,始終保持在一個極低的水平。

安德魯·克拉皮文(Andrew Krapivin),是一名羅格斯大學的 00 後本科生,在 2021 年秋季一次偶然的論文閱讀中,敏銳地捕捉到“微型指標”(Tiny Pointers)概念的潛在價值。
論文題目:Tiny Pointers論文連結:https://arxiv.org/pdf/2111.12800
微型指標是一種類似箭頭的東西,指向的是計算機記憶體中的一段資訊或一個元素。
計算機記憶體中儲存著各種各樣的資料,指標就像是記憶體中的“路標”,指引程式快速找到所需的資料。 它本質上是一個地址,指向資料在記憶體中的位置。
微型指標的目標是讓這些“路標”更小、更輕便。 就像把厚重的路標牌換成更簡潔的指示箭頭,微型指標用更少的記憶體空間來儲存地址資訊,從而提升整體記憶體利用率。
克拉皮文從這篇論文中獲得啟發,他意識到,要讓更小的“路標”發揮更大的作用,需要一套全新的資料組織策略,才能更好地管理和利用這些“微型指標”所指向的資料。

如果指標可以變得更“微型”,那能否連帶著重新設計雜湊表本身?
這個過程中,他意外地發明了一種執行速度更快的雜湊表。 這種雜湊表即使在最壞的情況下,查詢和插入資料也只需要 (log 𝑥)² 這麼多的步驟,而根據之前圖靈獎得主姚期智的理論,這個步驟應該是 𝑥,新雜湊錶快了很多!
最初,導師法拉赫-科爾頓(Martín Farach-Colton)對這個發現表示懷疑,因為雜湊表是計算機科學裡研究得最透徹的技術之一,突然出現這麼大的進步,讓人難以置信。

為了確保萬無一失,導師請卡內基梅隆大學的威廉·庫茲馬爾(William Kuszmaul)幫忙驗證。

驗證結果令人驚喜,庫茲馬爾確認,克拉皮文不僅發明了一種新的雜湊表,更重要的是,他推翻了一個持續了 40 年的計算機科學猜想-姚期智 40 前的理論推斷!
這個結果震驚了所有人。連研究團隊自己都一度不敢相信,反覆驗證了無數次,才敢將其發表:

克拉皮文的論文中指出:
-
傳統認知中,開放定址雜湊表的最壞情況查詢和插入時間複雜度與負載係數 𝑥 呈線性正比關係,即 O(𝑥)。而他們的新提出的非貪心型的雜湊表,即使在接近滿載的情況下,查詢和插入時間複雜度僅為 O((log 𝑥)²),遠優於 姚期智教授之前推論的 O(𝑥) 級別。 -
姚期智教授之前推斷“對於具有某些“貪婪”插入屬性的雜湊表,其平均查詢時間存在 O(log 𝑥) 的理論下限”。而克拉皮文團隊透過引入非貪婪插入策略,推翻了這樣的限制條件。 他們證明,他們所提出的新型雜湊表能夠實現與負載係數 𝑥 無關的常數級別平均查詢時間。
結語
雜湊表作為計算機科學發展的活態見證者,其演進歷程深刻對映著計算正規化的革新軌跡。
然而,克拉皮文的突破性研究昭示了一個被長期忽視的真理:即便在看似成熟的基礎演算法領域,效能極限的邊界仍充滿未知可能。
這位年輕學者對經典雜湊理論的顛覆性重構,不僅終結了歷時四十載的理論猜想,更重要的是重塑了學界對"計算最優性"(computational optimality)的認知框架 ~
當現代技術賦予我們更強大的分析工具時,克拉帕廷現象的啟示愈發清晰:那些被視為完美的經典演算法,或許正等待著被重新解構。
正如計算科學家阿倫森所言:"演算法的終極可能性,永遠超越我們當前的想象力"。這種對未知的永恆探索,正是計算機科學最迷人的光芒。


