Redis設計與實現-05-跳躍表

《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層之下鏈表都會出現。
    • 每一個節點包含兩個指針,一個指向同一層中的下一個元素,一個指向下一層的元素。

img

  • 跳躍表的查找
    • 從最頂層鏈表開始,如果本層找不到則去下層查找。因爲每層都是有序鏈表,且上層有的元素下層肯定有,所有縮小了下層查找的範圍。
    • 如果一直到最後一層都沒有找到,則數據不再該鏈表中。
  • 跳躍表的增加
    • 插入一個元素時,通過隨機(拋硬幣)的方法來確定是否需要插入。
      • 理想的跳躍表i層的元素數量是i+1的2倍,是i-1層的1/2倍。
      • 第0層是肯定要插入的。
      • 往上的層是否需要插入通過隨機來確定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章