標準的開放定址雜湊表在條目聚集、探測鏈變長時效能會下降。Rasmus Pagh 與 Flemming Friche Rodler 提出一個問題:如果每個鍵值恰好有兩個可能的位置,而非只有一個,會發生什麼事?

他們的字典結構於 2001 年在奧胡斯的 BRICS 發表,使用兩個雜湊函數與兩張表。發生碰撞時,新到的鍵值會逐出原有佔用者,而被逐出的鍵值再遞迴前往它的另一個歸屬位置。查詢保證最多只需兩次探測。

由於兩張表平均只需約半滿,此結構在維持記憶體效率的同時,提供最壞情況下嚴格的常數查詢時間。

給每個鍵值兩個位置,並搬移落敗者

兩個可能位置將搜尋限制在兩次探測內,無論鍵值集合為何。

逐出機制解決碰撞,無需冗長的探測鏈或鏈結串列。

它維持高裝載率,因此能善用記憶體,同時保持良好的快取友善性。

選擇在最壞情況下也快速、而非僅平均快速的資料結構。二選一的逐出機制將罕見但代價高昂的碰撞,轉化為有界的兩次探測查詢。

杜鵑雜湊法成為字典理論與實務上的參考成果。其常數時間保證與快取局部性,使其在硬體與高效能路由領域具吸引力,而逐出的構想也影響了後續的雜湊與草圖(sketching)方案。

追溯依據

參考來源

  1. Cuckoo Hashing (BRICS Report Series 8(32)) BRICS (Aarhus University) via Crossref · doi.org
  2. Cuckoo Hashing (full paper, BRICS) BRICS Report Series · tidsskrift.dk