跳錶
- 定義
跳錶就是鏈表的一種變形。來降低鏈表查找和刪除的時間複雜度。跳錶其實就是一種可以進行二分查找的有序鏈表。
這樣的結構可以大大提高查找效率例如我要查找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/4,k級索引是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)
- 優化
當我建立索引之後不斷往鏈表中插入數據時,索引並不隨之添加。跳錶就會退化成鏈表。
解決辦法,插入數據的同時我們可以將數據隨機插入到部分索引層中。