A 跳過列表是一種數據結構,其中元素按排序順序存儲,並且列表中的每個節點可以包含多於1個指針,並用於減少搜索所需的時間從單一鏈接列表中的O(n)
到平均情況的O(lg n)
的操作。它看起來像這樣:插入跳過列表
參考:由沃伊切赫·穆拉 「跳錶」 - 自己的工作。通過維基共享資源,根據公有領域授權 - http://commons.wikimedia.org/wiki/File:Skip_list.svg#mediaviewer/File:Skip_list.svg
它可以被看作是一個類比標尺:
在跳躍列表,搜索一個元素,刪除一個是好的,但是當它來插入,它變得困難,因爲根據Data Structures and Algorithms in C++: 2nd edition by Adam Drozdek
:
要插入一個新元素,只是插入必須被重組節點以下的所有節點;指針的數量和指針的值必須改變。
我可以從這個詮釋,雖然選擇基於節點的可能性指針的隨機數一個節點插入一個新的元素,不創建一個完美的跳躍列表,它變得非常接近它在考慮大量元素時(例如〜900萬)。
我的問題是:爲什麼我們不能在新節點中插入新元素,根據前一個節點確定它的指針數量,將它附加到列表末尾,然後使用高效的排序算法僅對存在於節點中的數據進行排序,從而保持跳過列表的完美結構並且還實現了插入複雜性?
編輯:我還沒有嘗試過任何代碼,我只是提出了一個觀點。僅僅因爲實施跳過列表有點困難。抱歉。
我不明白爲什麼所有在插入的節點後面的節點都需要改變。爲什麼不插入像正常的鏈接列表並完成呢?跳過列表不一定需要「快速」跳躍之間的間隔。 – 2014-10-09 06:35:43