【问题标题】:Can a skip-list have duplicate elements?跳过列表可以有重复的元素吗?
【发布时间】:2016-11-23 23:38:23
【问题描述】:

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

【问题讨论】:

标签: data-structures duplicates skip-lists


【解决方案1】:

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

你能制作一个支持重复的跳过列表吗?绝对地!您只需更新插入过程,这样如果您看到要查找的元素,您只需在其后面插入该元素。这类似于您如何拥有一个存储多个相等值的 BST - 您只需让插入过程在找到相等元素时始终向左或始终向右。

必须跳过列表总是允许重复?不,不必,就像并非所有 BST 都允许重复一样。

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

【讨论】:

  • 我的经验中的一些注释:我已经实现了一个带有重复项的可索引跳过列表(我的用例绝对需要这两个属性),但是对于具有大量重复项的数据集,我遇到了糟糕的性能问题因为链接没有跳过太多。我试过不在具有相等值的节点之间创建链接,但它似乎没有多大帮助。我仍在研究如何让它更快,我有很多想法,包括一个额外的指针,可以访问最后一行上最后一次出现的值,以跳过所有重复项。
  • 另一个未经测试的想法:尝试表示节点包含的距离值中的重复数(用于实现随机访问),并且实际上只插入一次值,只增加或减少距离。跨度>
  • 更新:我谈到的第二个想法是最好的。我设法获得了相当快的插入、删除和随机访问(比 TreeSet 中的等效方法慢 1 到 4 倍,但支持随机访问和重复)。为了您的兴趣,我的实现在这里:github.com/Dicee/algorithmicProblems/blob/master/hackerrank/…
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2022-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多