一、什麼是跳表
在普通鍊錶中要查詢某個元素,只能從頭到尾遍歷鍊錶。這樣查詢的時間複雜度很高(o(n))。為了提高查詢效率,可以對鍊錶建立「索引」。鍊錶加多級索引的結構,就是跳表。在跳表中查詢任意資料的時間複雜度為o(logn)。由於要儲存索引結構,空間複雜度為o(n),跳表利用了「空間換時間」這種思想。
跳表不僅支援查詢操作,還支援動態的插入、刪除操作,而且插入、刪除操作的時間複雜度也是o(logn)。
二、為什麼redis要用跳表來實現有序集合,而不是紅黑樹
redis中的有序集合支援的核心操作主要有下面這幾個:
對於插入、刪除、查詢以及迭代輸出有序序列這幾個操作,紅黑樹也可以完成,時間複雜度跟跳表是一樣的。但是,根據區間來查詢資料這個操作,紅黑樹的效率沒有跳表高。對於按照區間查詢資料這個操作,跳表可以做到o(logn)的時間複雜度定位區間的起點,然後再原始鍊錶中順序往後遍歷就可以了。這樣做非常高效。
資料結構學習筆記 跳表
基於鍊錶稍加改造的一種各方面效能都比較優秀的動態資料結構,可支援快速插入,刪除,查詢操作,甚至可以代替紅黑樹 基於原鍊錶每兩個結點向上一級抽索引,構建出一級索引層,可構建多級索引,這種鍊錶加多級索引的結構,就是跳表 redis中的有序集合 sorted set 就是採用跳表實現 跳表中查詢任意資料的...
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...