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