跳表簡單快速理解

2021-10-22 15:47:06 字數 1135 閱讀 6818

寫在前面: 本博文記錄下自己的理解,不屬於科普類分享

跳躍表是一種隨機化資料結構,基於併聯的鍊錶,其效率可以比擬平衡二叉樹,查詢、刪除、插入等操作都可以在對數期望時間內完成,對比平衡樹,跳躍表的實現要簡單直觀很多。

插入邏輯:

在上圖的基礎上,插入44這個數

假設44隨機生成的層數是2層

至此,插入工作完畢

效果如下所示:

插入與查詢以及刪除的邏輯其實都差不多

對於乙個普通的排序鍊錶,我們要進行增刪改時,無法隨機遍歷,只能順序遍歷,o(n)的時間複雜度,比較慢,如果資料量很大,直接崩潰。

而使用我們的跳表,則可以達到平均o(logn)的時間。

試想,乙個各個節點高度不一樣的鍊錶,參差不齊。

第一層的最多,在節點數量足夠多時,第一層佔比50%,第二層佔比25%,第三層佔比12.5%。。。

底層多,高層少。

當我們要從1000w個節點找到第660w個數時,我們從高層開始找,高層數的數量很少,我們僅用時很少的情況下,可能就找到了480w這個點,那麼480w之前的點我們就跳過去了,從而節省了事件。

然後在480w~1000w這個區間裡重複查詢,每次利用高度高的節點幫我們跳過多數節點

最終,我們可以近似的得到o(logn)的時間

redis中的5種資料結構之一的zset的一種實現方式之一

redis作者為了適合自己功能的需要,對原來的跳躍表進行了一下修改:

允許重複的score值:多個不同的元素(member)的score值可以相同

進行元素對比的時候,不僅要檢查score值,還需要檢查member:當score值相等時,需要比較member域進行比較。

結構儲存乙個tail指標:跳躍表的表尾指標

每個節點都有乙個高度為1層的前驅指標,用於從底層表尾向表頭方向遍歷

來自於跳表(skiplist)資料結構介紹

redis內部資料結構詳解之跳躍表(skiplist)

簡單理解的快速排序

快速排序就是c.r.a.hoare 於 1962年提出一種劃分交換排序,它採用了分治的策略,通常稱其為分治法。分治法的基本意思是 將原問題分解為若干規模更小但結構與原問題相似的子問題,遞迴地解答這些子問題,然後將這些子問題的解組合為原問題的解。快速排序的基本思想是 假設當前待排序的無序區為 a lo...

關於redis中zset底層跳表的理解

跳表是乙個隨機化的資料結構,實質就是一種可以進行二分查詢的有序鍊錶。跳表在原有的有序鍊錶上面增加了多級索引,通過索引來實現快速查詢。跳表不僅能提高搜尋效能,同時也可以提高插入和刪除操作的效能。考慮乙個有序鍊錶,我們要查詢3 7 17這幾個元素,我們只能從頭開始遍歷鍊錶,直到查詢到元素為止。上述這個鍊...

OI 關於快速冪的簡單理解

快速冪 因為a b c n a n b n c 所以n m可以分解為n m n a1 n a2 n a3.n ak a1 a2 a3.ak m 所以我們想到,如果存在k我們都知道二進位制轉十進位制時,是對每一位呈上位權,而計算機可以對十進位制數進行位運算,通過位運算可求出二進位制的每一位,tobe ...