1. 程式人生 > >資料結構與演算法之美專欄學習筆記-跳錶

資料結構與演算法之美專欄學習筆記-跳錶

跳錶的概念

對連結串列建立n級索引,例如每兩個結點提取一個節點到上一層,稱之為索引層。

圖中的down表示down指標,指向下一級結點

 

跳錶的時間複雜度

跳錶的高度

跳錶的高度是log2n。

跳錶的時間複雜度

跳錶中查詢某個資料的時間複雜度是O(logn)。

 

跳錶的空間複雜度及優化

跳錶的空間複雜度

跳錶的空間複雜度為O(n)。

優化時間複雜度

如果連結串列有n個節點,每3或5個節點抽取抽出一個節點作為上一級索引的節點,

雖然跳錶的空間複雜度仍然是O(n),但和每2個節點抽取一次相比佔用的記憶體空間少了很多。

 

高效的動態插入和刪除

時間複雜度

跳錶本質上就是連結串列,所以僅插作,插入和刪除操時間複雜度就為O(1),

但在實際情況中,要插入或刪除某個節點,需要先查詢到指定位置,而這個查詢操作比較費時。

在跳錶中查詢操作的時間複雜度是O(logn),因此跳錶的插入和刪除操作的是時間複雜度也是O(logn)。

跳錶索引動態更新

當往跳錶中插入資料的時候,可以選擇同時將這個資料插入到部分索引層中,

可以通過隨機函式來決定將這個節點插入到哪幾級索引中,比如隨機函式生成了值K,那就可以把這個節點新增到第1級到第K級索引中。

 

跳錶程式碼實現