01
解決方案
以平衡樹建構的有序結構必須在每次更新後重新平衡,這意味著旋轉、重新著色與謹慎維護的不變式——這些全都容易出錯,也不易平行化。
跳表以機率規則取代這套機制。每個節點被賦予一個從急遽衰減分布抽出的層級,因此多數節點層級低、少數節點層級高,搜尋時可先跳過大段低層級節點,再逐層下降。
由於層級是隨機的,每層節點數的期望值呈幾何分布,搜尋、插入與刪除的期望複雜度皆為 O(log n)。程式碼簡短,且事後無須進行任何簿記。
02
達成了什麼
讓平衡由擲硬幣而非旋轉來維持
03
為何有效
隨機層級在不需重新平衡程式碼的情況下給出高度界限。
局部、易於加鎖的操作使其容易平行化。
簡單意味著需要維護且可能出錯的不變式更少。
04
可應用之處
當確定性重新平衡是昂貴且易錯的部分時,以誠實的隨機性取而代之:局部、簡單的操作能提供與手工維護不變式相同的期望效能。
05
後續發展
跳表成為函式庫與資料庫中樹結構的標準替代方案,最著名的是 Redis 的有序集合,其簡單性有助於並行處理與可預測的效能。
追溯依據
參考來源
- Skip Lists: A Probabilistic Alternative to Balanced Trees William Pugh / University of Maryland · cs.umd.edu
- Skip list Wikipedia · en.wikipedia.org