《Redis設計與實現》黃建宏版的讀書筆記
跳躍表介紹
原書中並沒有對跳躍表做詳細的介紹,記錄下來的信息爲自己整理。
參考
- https://www.cnblogs.com/thrillerz/p/4505550.html
- https://redisbook.readthedocs.io/en/latest/internal-datastruct/skiplist.html
跳躍表概念
- 跳躍表是在有序鏈表的基礎上進行擴展,解決有序鏈表查找困難的問題。
- 有序鏈表查找的時間複雜度爲O(n)
- 跳躍表查找的時間複雜度爲O(longN)
- 跳躍表的結構
- 有很多層構成。
- 每一層都是一個有序鏈表。
- 最底層的鏈表包含所有的元素。
- 如果一個元素出現在i層,則i層之下鏈表都會出現。
- 每一個節點包含兩個指針,一個指向同一層中的下一個元素,一個指向下一層的元素。
- 跳躍表的查找
- 從最頂層鏈表開始,如果本層找不到則去下層查找。因爲每層都是有序鏈表,且上層有的元素下層肯定有,所有縮小了下層查找的範圍。
- 如果一直到最後一層都沒有找到,則數據不再該鏈表中。
- 跳躍表的增加
- 插入一個元素時,通過隨機(拋硬幣)的方法來確定是否需要插入。
- 理想的跳躍表i層的元素數量是i+1的2倍,是i-1層的1/2倍。
- 第0層是肯定要插入的。
- 往上的層是否需要插入通過隨機來確定。
- 插入一個元素時,通過隨機(拋硬幣)的方法來確定是否需要插入。