資料結構與演算法Java(四)跳表

2021-09-13 12:17:28 字數 746 閱讀 8498

1、定義:鍊錶加多級索引的結構,提高查詢效率,類似於二分查詢

時間複雜度:查詢,插入,刪除都是o(logn)

空間複雜度:o(n)

2、問題:插入資料過多時,可能出現某2個索引結點之間的資料非常多,極端情況下,跳表會退化成單鏈表

跳表的解決方式是通過隨機函式來維護平衡性。比如隨機函式生成了值k,那我們就將這個節點新增到第一級到第k級索引中

3、思考題:為什麼redis要用跳表來實現有序集合,而不用紅黑樹

答:redis有序集合的核心操作如下:插入/刪除/查詢乙個資料;按照區間查詢資料;迭代輸出有序序列。其中增刪查的操作紅黑樹也可完成,時間複雜度和跳表一樣,1)但是對於按照區間查詢這個操作,跳表可以做到o(logn)的時間複雜度定位區間的起點,然後再原始鍊錶中順序往後遍歷即可,效率高;2)相對紅黑樹,跳表更容易實現;3)跳表更加靈活,可以通過改變索引構建策略,有效平衡執行效率和記憶體消耗

資料結構與演算法 跳表

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

資料結構與演算法 跳表

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

資料結構與演算法 跳表

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