以平衡樹建構的有序結構必須在每次更新後重新平衡,這意味著旋轉、重新著色與謹慎維護的不變式——這些全都容易出錯,也不易平行化。

跳表以機率規則取代這套機制。每個節點被賦予一個從急遽衰減分布抽出的層級,因此多數節點層級低、少數節點層級高,搜尋時可先跳過大段低層級節點,再逐層下降。

由於層級是隨機的,每層節點數的期望值呈幾何分布,搜尋、插入與刪除的期望複雜度皆為 O(log n)。程式碼簡短,且事後無須進行任何簿記。

讓平衡由擲硬幣而非旋轉來維持

隨機層級在不需重新平衡程式碼的情況下給出高度界限。

局部、易於加鎖的操作使其容易平行化。

簡單意味著需要維護且可能出錯的不變式更少。

當確定性重新平衡是昂貴且易錯的部分時,以誠實的隨機性取而代之:局部、簡單的操作能提供與手工維護不變式相同的期望效能。

跳表成為函式庫與資料庫中樹結構的標準替代方案,最著名的是 Redis 的有序集合,其簡單性有助於並行處理與可預測的效能。

追溯依據

參考來源

  1. Skip Lists: A Probabilistic Alternative to Balanced Trees William Pugh / University of Maryland · cs.umd.edu
  2. Skip list Wikipedia · en.wikipedia.org