跳过小数据集的列表

时间:2012-10-24 01:51:18

标签: algorithm data-structures language-agnostic skip-lists

我对使用跳过列表打开A *的打开列表很感兴趣。然而,让我感到困惑的是它的概率本质。开放列表可以从非常小的集合到多个节点,并且需要保持每个节点的性能。

据我所知,跳过列表更有可能随机给出小数据集的错误结果。我认为这可能会产生大量短路径的问题。

我正在考虑解决这个问题,为什么不在一定程度上监视随机数。保持每个级别的节点数的运行总计,以便在每个级别之间保持理想的节点分布,有时会干预并强制节点成为特定级别。

我不确定这在我的给定应用程序中的效果如何,如果可能我应该专注于我的开放列表的另一个数据结构。

我在跳过列表上阅读的所有文章均未提及此类优化。由于我对整个性能分析游戏相当陌生,所以我对尝试改进记录的数据结构犹豫不决。

3 个答案:

答案 0 :(得分:2)

我建议您创建一个程序,随机生成您希望A *算法创建的长度的跳过列表。检查这些列表,看看它们中有多少不是最佳的。

我不建议您尝试创建具有您建议的监控的生产跳过列表数据结构。您可能会发现监控和干预代码会导致跳过列表在一般情况下表现不佳。

答案 1 :(得分:1)

  1. 是的,你是对的 - 在讨论小型跳过列表时,跳过列表有更高的机会衰减。
    一般来说,根据this paper,有一个常数alpha,以便跳过列表超过alpha * n空间的概率小于1/2Ω(sqrt(n)) - 所以随着跳过列表变大,这种情况(超过此限制)变得越来越小。

  2. 为了避免跳过列表最坏的情况,可以使用原始跳过列表的变体,确定性跳过列表。该主题在this thesis work

  3. 中讨论
  4. 其他替代方案为balanced BSTs,例如AVLred-black-tree,甚至B+ trees(通常是文件系统的首选)。

  5. 如果你的“开放式集合”确实如此之小 - 你的分支因素也很小(接近1),或者恰好是B^d(d =解决方案的深度; B =分支因子)也会很小。这将导致快速查找,无论跳过列表实现如何,因为预计需要的节点很少。

答案 2 :(得分:0)

当你说“跳过列表有可能随机给小数据集提供不良结果”时,你究竟害怕什么?

你不应该害怕的是,对于10个元素的列表,没有足够的2级或3级节点来加速遍历。迭代链接列表(即没有2级以上节点的跳转列表)的2个元素或10个元素之间的差异基本上是不存在的,即使在紧密循环中(数据所需的节点引用管理类型)也是如此结构可能会产生更大的影响。)

显然,一旦你获得了更多的元素,没有足够的更高级别节点的影响就会增加。但幸运的是,获得更高级别节点的机会也增加了。例如,如果添加8个元素,则它们都是1级节点的几率为0.5 ^ 8 = 0.39%,即极不可能。