日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

跳跃链表

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跳跃链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


跳躍列表(也稱跳表)是一種隨機化數據結構,基于并聯的鏈表,其效率可比擬于二叉查找樹(對于大多數操作需要O(log n)平均時間)。

基本上,跳躍列表是對有序的鏈表增加上附加的前進鏈接,增加是以隨機化的方式進行的,所以在列表中的查找可以快速的跳過部分列表,因此得名。所有操作都以對數隨機化的時間進行。

跳躍列表是按層建造的。底層是一個普通的有序鏈表。每個更高層都充當下面列表的“快速跑道”,這里在層 i 中的元素按某個固定的概率 p (通常為0.5或0.25)出現在層 i+1 中。平均起來,每個元素都在 1/(1-p) 個列表中出現,而最高層的元素(通常是在跳躍列表前端的一個特殊的頭元素)在 O(log1/p n) 個列表中出現。

要查找一個目標元素,如上圖所示,起步于頭元素和頂層列表,并沿著每個鏈表搜索,直到到達小于或著等于目標的最后一個元素。通過跟蹤起自目標直到到達在更高列表中出現的元素的反向查找路徑,在每個鏈表中預期的步數顯而易見是 1/p。所以查找的總體代價是 O((log1/p n) / p),當p 是常數時是 O(log n)。通過選擇不同 p 值,就可以在查找代價和存儲代價之間作出權衡。

插入和刪除的實現非常像相應的鏈表操作,除了"高層"元素必須在多個鏈表中插入或刪除之外。

跳躍列表不像某些傳統平衡樹數據結構那樣提供絕對的最壞情況性能保證,因為用來建造跳躍列表的扔硬幣方法總有可能(盡管概率很小)生成一個糟糕的不平衡結構。但是在實際中它工作的很好,隨機化平衡方案比在平衡二叉查找樹中用的確定性平衡方案容易實現。跳躍列表在并行計算中也很有用,這里的插入可以在跳躍列表不同的部分并行的進行,而不用全局的數據結構重新平衡。

這個期望步數為1/p不好理解,后來看了英文文檔也不是特別懂,就是用公式推導出來的,相關文檔見ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf

其中關鍵說法如下:


C(K)為爬到第K層所付出的代價,代價為在本層的代價,加上往下爬 一層的代價,以(1-p)的概率在本層,以p的概率在下一層,這個公式看著迷糊……

最后就推導出了C(k) = k/p,極限為n/p,最低層的代價,然后后面引出平均期望代價就是平均層數/p,也就變成了上述O((log1/p n) / p)。

還是很迷糊,還是記住吧……

其他資料也沒有找到詳細的講解過程,只是有個結論而已


總結

以上是生活随笔為你收集整理的跳跃链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。