關於 SkipList 跳表 的一些資料梳理

2021-09-24 00:15:06 字數 1018 閱讀 3239

關於 skiplist (跳表)的一些資料梳理

skiplist(譯為跳表,又稱跳躍表);

跳躍列表是一種資料結構。它允許快速查詢乙個有序連續元素的資料鏈表。跳躍列表的平均查詢和插入時間複雜度都是o(log n),優於普通佇列的o(n)。

快速查詢是通過維護乙個多層次的鍊錶,且每一層鍊錶中的元素是前一層鍊錶元素的子集。一開始時,演算法在最稀疏的層次進行搜尋,直至需要查詢的元素在該層兩個相鄰的元素中間。這時,演算法將跳轉到下乙個層次,重複剛才的搜尋,直到找到需要查詢的元素為止。跳過的元素的方法可以是隨機性選擇或確定性選擇,其中前者更為常見。

跳躍列表由威廉·普發明。發明者對跳躍列表的評價是:「跳躍列表是在很多應用中有可能替代平衡樹而作為實現方法的一種資料結構。跳躍列表的演算法有同平衡樹一樣的漸進的預期時間邊界,並且更簡單、更快速和使用更少的空間。」

– 摘自維基百科

skip list(跳躍表)是一種支援快速查詢的資料結構,插入、查詢和刪除操作都僅僅只需要o(log n)對數級別的時間複雜度,它的效率甚至可以與紅黑樹等二叉平衡樹相提並論,而且實現的難度要比紅黑樹簡單多了。

– 摘自掘金

跳躍列表是一種隨機化資料結構,基於併聯的鍊錶,其效率可比擬二叉查詢樹。

對於有序鍊錶,查詢的時間複雜度為o(n),儘管真正的插入與刪除操作節點複雜度只有o(1),但都需要先查詢到節點的位置,可以說是查詢拉低了有序鍊錶的效能。

skiplist採用「空間換時間」的思想,除了原始鍊錶外還儲存一些「跳躍」的鍊錶,達到加速查詢的效果。

concurrentskiplistmap

concurrentskiplistmap提供了一種執行緒安全的併發訪問的排序對映表。內部是skiplist(跳表)結構實現,在理論上能夠o(log(n))時間內完成查詢、插入、刪除操作。

SkipList跳表記錄一下

節點擁有鍵和值,並按排序單獨鏈結順序,可能帶有一些中間的標記節點。清單是以可作為head.node訪問的虛擬節點為首。值字段僅宣告為object,因為它需要特殊的非v標記和標頭節點的值。static final class node 索引節點代表跳過列表的級別。注意即使節點和索引都具有前向指向字段,...

關於RemoteView 的一些字型的一些問題

最近在做乙個 在notification 新增 天氣通知的小部分 發現困擾在 如何給 remoteview 中的字型 作修改 大家都知道 textview 設定字型 在xml 中 可以 設定 3種 而其他字型的設定 需要通過 typeface 去設定 具體 將字型放置在asset 資料夾中 type...

關於Thread的一些

執行緒有幾種狀態 1.產生 new 執行緒已經產生,只是放在記憶體中啥事都不幹。2.可執行 runnable 在呼叫了start方法到它獲得系統給它分配了時間片之前,或者時間片用完了但還沒執行完。3.執行 running 獲得了時間片,正在執行。4.死亡 dead 執行完成 5.阻塞 block 不...