Data structures 跳过列表是否可以包含重复的元素?

Data structures 跳过列表是否可以包含重复的元素?,data-structures,duplicates,skip-lists,Data Structures,Duplicates,Skip Lists,我知道跳过列表是一种排序的数据结构,但它能有重复的元素吗?或者,如果您尝试插入一个已经存在的元素,它只会返回指向先前存在的元素的指针?答案是“是的,skiplist可以有重复的元素,但不需要。” 你能制作一个支持重复的skiplist吗?绝对地您只需更新插入过程,这样,如果您看到要查找的元素,您只需在其后面插入元素即可。这与BST存储多个相等值的方式类似——只要插入过程在找到相等元素时总是向左或向右 但是一个技工必须总是允许重复吗?不,不必这样,就像不是所有的BST都允许复制一样 如果您使用的是

我知道跳过列表是一种排序的数据结构,但它能有重复的元素吗?或者,如果您尝试插入一个已经存在的元素,它只会返回指向先前存在的元素的指针?

答案是“是的,skiplist可以有重复的元素,但不需要。”

你能制作一个支持重复的skiplist吗?绝对地您只需更新插入过程,这样,如果您看到要查找的元素,您只需在其后面插入元素即可。这与BST存储多个相等值的方式类似——只要插入过程在找到相等元素时总是向左或向右

但是一个技工必须总是允许重复吗?不,不必这样,就像不是所有的BST都允许复制一样


如果您使用的是skiplist库,请查阅文档以查看它是否支持重复项。如果您正在创建自己的,请随意创建,并记录您的决定。

它可以。。请参阅我的经验中的一些注释:我已经实现了一个带有重复项的可索引跳过列表(对于我的用例来说,绝对需要这两个属性),但是对于具有大量重复项的数据集,我遇到了糟糕的性能问题,因为链接没有跳过太多。我尝试过不在具有相同值的节点之间创建链接,但似乎没有多大帮助。我仍在研究如何使它更快,我有很多想法,包括一个额外的指针,允许访问最后一行上最后一次出现的值,以便跳过所有重复项。另一个未经测试的想法:尝试在节点包含的距离值中表示重复项的数量(用于实现随机访问)事实上,只插入一次值,只增加或减少距离。更新:我提到的第二个想法是最好的。我成功地实现了相当快的插入、删除和随机访问(比
TreeSet
中的等效方法慢1到4倍,但支持随机访问和重复)。为了您的利益,我在这里实施: