redis redis系列四 跳躍表

2021-09-14 00:10:48 字數 837 閱讀 8310

跳躍表通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。跳躍表支援平均o(logn)、最壞o(n)複雜度的節點查詢。

跳躍表定義在server.**件中,下圖所示為乙個跳躍表的示例:

上圖中最左邊的是zskiplist結構,右邊四個是跳躍表節點(zskiplistnode結構),跳躍表的結構定義如下:

// 跳躍表節點

typedef

struct zskiplistnode level;

} zskiplistnode;

各屬性說明如下:

zskiplist結構的定義如下:

typedef

struct zskiplist zskiplist;

各屬性說明如下:

注:表頭結點和其他節點構造是一樣的,表頭結點也有後退指標、分值和成員物件,不過表頭結點的這些屬性都不會用到

跳躍表從表頭節點開始以跨度為1向表尾方向前進即可遍歷整個跳躍表。跨度可以用來計算排位:在查詢某個節點的過程中,將沿途訪問過的所有層的跨度累計起來,得到的結果就是目標節點在跳躍表中的排位。

跳躍表中的所有節點都是按照分值從小到大排序的,同乙個跳躍表中,各個節點儲存的成員物件必須是唯一的,但多個節點儲存的分值卻可以是相同的,分值相同的節點將按照成員物件在字典中的大小來排序,成員物件較小的節點會排在前面(靠近表頭方向),而成員物件較大的節點則會排在後面(靠近表尾方向)。

跳躍遊戲系列

已在 leetcode 上驗證通過。55.跳躍遊戲 給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。class solution return true 45.跳躍遊戲 ii 給定乙個非負整數陣列,你最初位於陣列的第...

四 跳躍表(Redis)

跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的 指標,從而達到快速訪問節點的目的。redis 的跳躍表由 redis.h zskiplistnode 和 redis.h zskiplist 兩個結構定 義,其中zskiplistnode結構用於表示跳躍表節點,...

Redis學習筆記(四) 跳躍表

跳躍表是一種以o log n 期望時間支援查詢 插入 刪除操作的 有序的資料結構。redis使用跳躍表作為有序集合鍵的底層實現之一。跳表的基本實現原理參考 skip lists a probabilistic alternative to balanced trees redis的跳表由zskipl...