數據結構和算法----跳錶

跳錶

  • 定義

跳錶就是鏈表的一種變形。來降低鏈表查找和刪除的時間複雜度。跳錶其實就是一種可以進行二分查找的有序鏈表。

這樣的結構可以大大提高查找效率例如我要查找8

正常查找需要遍歷八個節點,現在只需要遍歷七個節點,這個數據量比較小,優勢不太明顯。數據量越大有優勢越明顯

這種鏈表加多級索引的結構就是跳錶

  • 分析

時間複雜度:每兩個結點會抽出一個結點作爲上一級索引的結點,那第一級索引的數量就是n/2,第二級索引的數量就是n/4。依此類推!k級索引的個數就是n/2^k。假設索引有h級,最高級的索引有兩個節點。通過上面的公式我們可以得到n/(2^h)=2,從而求得h= log2n-1,去掉原始鏈表。跳錶的高度就得log2n。每層最多遍歷三個節點。那麼時間複雜度就爲O(3log2n)去除常數項時間複雜度爲O(logn)

空間複雜度:時間複雜度那裏說過第一級索引的數量就是n/2,第二級索引的數量就是n/4k級索引是n/2^k。所以所有節點得總和爲

n/2+n/4+n/8+…+n/2k

   =(2k-1)n/2k

   =n – n/2k 由 n/(2^h)=2 n – 2 省略常數項空間複雜度爲O(n)

  • 優化

當我建立索引之後不斷往鏈表中插入數據時,索引並不隨之添加。跳錶就會退化成鏈表。

解決辦法,插入數據的同時我們可以將數據隨機插入到部分索引層中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章