1. 程式人生 > >資料結構學習筆記五(跳錶)

資料結構學習筆記五(跳錶)

一、什麼是跳錶

       在普通連結串列中要查詢某個元素,只能從頭到尾遍歷連結串列。這樣查詢的時間複雜度很高(O(n))。為了提高查詢效率,可以對連結串列建立“索引”。連結串列加多級索引的結構,就是跳錶。在跳錶中查詢任意資料的時間複雜度為O(logn)。由於要儲存索引結構,空間複雜度為O(n),跳錶利用了“空間換時間”這種思想。
       跳錶不僅支援查詢操作,還支援動態的插入、刪除操作,而且插入、刪除操作的時間複雜度也是O(logn)。
在這裡插入圖片描述

二、為什麼Redis要用跳錶來實現有序集合,而不是紅黑樹

Redis中的有序集合支援的核心操作主要有下面這幾個:

  • 插入一個數據
  • 刪除一個數據
  • 查詢一個數據
  • 按照區間查詢資料(比如查詢值[100,356]之間的資料)
  • 迭代輸出有序序列

       對於插入、刪除、查詢以及迭代輸出有序序列這幾個操作,紅黑樹也可以完成,時間複雜度跟跳錶是一樣的。但是,根據區間來查詢資料這個操作,紅黑樹的效率沒有跳錶高。對於按照區間查詢資料這個操作,跳錶可以做到O(logn)的時間複雜度定位區間的起點,然後再原始連結串列中順序往後遍歷就可以了。這樣做非常高效。