【问题标题】:Is there a name for this collection of sorted arrays data structure?这个排序数组数据结构的集合有名称吗?
【发布时间】:2013-06-03 06:51:49
【问题描述】:

下面的数据结构有名字吗?有论文和引用吗?

to implement 一种有效的设置抽象数据类型的方法是拥有一个排序数组的集合,其中每个数组都有唯一的 2 次方大小。

例如,一组 13 个元素 {1, 2, ..., 13} 可以由以下排序数组的集合表示:{[5], [2, 3, 9, 13], [1, 4、6、7、8、10、11、12]}。

通常,集合中的数组的大小对应于集合大小的二进制表示中的 1 位。数据结构是高效的,因为插入可以在分摊的O(1)时间内执行,搜索可以在O((log n )2) 时间(优于线性搜索)。此外,它仅使用 O(log n) 空间开销用于指针,这与平衡二叉树和使用 O(n) 额外的指针空间。因此,几乎所有空间都用于有效载荷数据。

我查看了维基百科的list of data structures,但没有找到匹配项。诚然,《Introduction to Algorithms》(“CLRS”)一书在“Amortized Analysis”部分将这种数据结构描述为一个家庭作业问题,但由于它是一个问题而不是一个例子,所以书中并没有多说。

【问题讨论】:

  • 我只能想到标签“数据结构”。我会很感激相关标签的建议!
  • 这些现有的问题都是关于同一个数据结构的,但是他们问的是实现和解释:stackoverflow.com/questions/2602110stackoverflow.com/questions/4701433。我知道数据结构是如何工作的,所以我专门寻找有关它的已发表文献。

标签: data-structures computer-science


【解决方案1】:

类似的想法至少可以追溯到 Jean Vuillemin 在 1978 年 4 月发行的 CACM 中的original publication on binomial heaps。我希望介绍这种数据结构的论文能够被 Vuillemin 引用或被引用,但“参考”和“被引用”列表中的论文看起来都没有希望。

如果我是你,我会询问 cstheory,然后写信给 CLRS,但鉴于次优界限和缺乏删除,我预计不会出现任何情况,除非 succinct data structure 社区对某些内容感兴趣点。

您有什么特别想知道的吗?

【讨论】:

  • 感谢您参考 SE:cstheory 和简洁的 DSes,它们对我来说很相关但很新。我问这个问题是因为我想为这个数据结构写,我可以做到。但我想给它起一个已经被接受的名字,也想建立在现有文献的基础上,而不是仅仅依靠我自己的想法。
  • 确实,搜索时间不是最理想的,但我利用了我的一个应用程序的简洁性,因为它需要将数百万个已经访问过的游戏状态保存在内存中。至于删除,CLRS 确实说“讨论如何实现 DELETE。”,但经过简单的思考,我想不出任何明显的方法可以在摊销的 O(n log n) 时间内实现它......
  • @NayukiMinase 想想看,删除也应该分期偿还 O(1),方法是使用位图指示未删除的项目并向下合并一个半空数组。
  • @NayukiMinase 请注意,人们经常将游戏状态存储在布隆过滤器中,这会牺牲一些准确性来节省更多空间。
  • 是的。对于我的游戏,我在第一级使用了一个布隆过滤器,然后我使用这个排序数组集合作为后备存储。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 2016-08-27
  • 2022-12-29
  • 2011-02-26
  • 2013-04-08
  • 2023-03-03
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多