演算法 跳表資料結構

2022-07-10 15:45:11 字數 703 閱讀 4913

關於跳表

跳表作為一種特殊的有序單鏈表結構,由於鍊錶本身並不支援二分查詢,而在跳表結構中其通過維護多級索引的方式來實現快速查詢(類似於二分查詢);

對於其索引的結構為存在兩個指標,分別是next指標指向同一層級的下乙個節點; 同時存在乙個down指標指向下一層相同位置(以及相同資料)的節點;

通過增加多級索引可以實現快速查詢的目的,避免由於相鄰層相同位置索引之間存在過於密集的資料,因此當發現存在出現密集資料時,需要進行索引優化,將索引再次向上抽取提高查詢效率;

對於跳表實際就是通過維護多級索引實現類似於二分查詢的目的,雖然不能像陣列一樣直接定位到中間索引位置來實現快速二分法, 但跳表卻可以通過多級索引實現二分法(例如在最高端別索引中可以維護1個或三個節點,就可以基本保證只需要兩次查詢索引操作就可以定位到中間元素,然後依次類推就可以滿滿的縮小其可能存在的範圍)

對於跳表的插入刪除查詢等時間複雜度都為 o(logn), 但由於需要維護多級索引,因此需要額外的記憶體空間,雖然空間複雜度為o(n),但n也不是乙個完全可以忽略不計的情況;

和紅黑樹進行對比,首先限制條件不像紅黑樹一樣多,另外其可以有效的平衡效率和空間問題(例如當認為空間浪費較多或索引之間空洞較大的情況下,可以不維護那麼多層級的索引,同時也不會直接影響到效率問題);

而對於紅黑樹而言,雖然其時間複雜度也為o(logn),但相對而言跳表的**實現更加簡單一些

資料結構與演算法 跳表

回顧上節 上節課中我們學習了二分法查詢,最基本的二分法查詢需要隨機的訪問資料,底層都是基於陣列的儲存結構 1 思考問題,如果底層是基於鍊錶的方式儲存資料.是否能用二分法查詢呢?我們只要對陣列進行稍微改造,基於鍊錶實現,並在鍊錶的基礎上分別建立對於的索引,就可以快速的基於鍊錶的方式進行查詢,而且該種方...

資料結構與演算法 跳表

二分查詢利用靜態陣列隨機訪問的特性,可以實現在有序的陣列中快速找到某個值,但是因為靜態陣列需要申請連續的記憶體空間,所以當資料規模比較大時,在記憶體中可能無法申請到所需的連續空間。因此,基於這一特性,我們考慮能否將二分查詢應用於鍊錶結構,這樣就避免連續空間的限制,但是對於鍊錶結構,怎樣提高它的查詢效...

資料結構與演算法 跳表

解決鍊錶查詢時耗時過長的問題。英文全稱 skip list 鍊錶 多級索引 鍊錶 跳表 顧名思義,跳表的查詢是在多個鍊錶之間跳躍查詢的,其路線類似於走台階,如下圖所示 舉個栗子 某一時刻,想查詢代號為 8 的節點的資料,按照常規鍊錶查詢,需要從最左側挨個查詢至最右側,遍歷次數為 8 時間複雜度為 o...