这个数组数据结构的名称是什么?

时间:2013-04-18 16:39:50

标签: arrays algorithm data-structures

将一个大小为n的数组实现为sqrt(n)指针数组。

要在i插入项目,请转到i/sqrt(n)处的指针。如果该指针为null,请将其指定给大小为sqrt(n)的新数组。将您的项目插入位置i mod sqrt(n)的新数组中。

优点很简单:它允许您创建一个最初只占用O(sqrt(n))空间的大型数组。您可以在恒定时间内访问任何元素,并且它允许您填充数组的部分,而无需为所有n位置分配空间。

这可能已经用于哈希表,我还有另一个应用程序。我的问题是:这有名字吗?我可以使用任何常见的实现?

6 个答案:

答案 0 :(得分:5)

此数据结构与hashed array tree (HAT)数据结构密切相关。散列数组树的结构与您上面描述的结构类似 - 您有一个大小为√n的顶级数组,其中每个条目都是指向具有√n元素的数组的指针。这使得插入和查找速度相当快,并且与传统动态数组的O(n)内存开销相比,只有O(√n)内存开销。

您的结构在某些方面与HAT不同。对于初学者来说,如果你需要更多的空间,你的结构似乎没有办法增长结构,而HAT的设计是可以增长的。此外,您的结构允许随机插入,而HAT设计用于顺序插入。也就是说,HAT必须以这种方式运行才有根本原因,因此您可以将您的数据结构视为对HAT的轻微修改。实际上,您可能希望了解HAT如何增长,以使您的数据结构支持增长。

希望这有帮助!

答案 1 :(得分:3)

好吧,我会称那个是一个带行向量的方阵。如果没有完全填充,它就是一个带有行向量的稀疏方阵。 1. < / SUP>

这里有两个优化工作。第一个是稀疏内存分配,第二个是行下标计算的strength reduction。对于超级计算机CPU无序执行指令,以及编译器通常进行全局流优化的时代,这种优化可能并不那么重要。

但它允许通过指针取消引用而不是乘以行大小来进行行索引。


1。然而,在数值分析中,稀疏矩阵是大多数为零的矩阵,因此稀疏数据结构正式具有相同的定义。在这种情况下,它更像是一个部分数据结构,但据我所知,这些事情并没有被接受的术语。

答案 2 :(得分:0)

这是一系列的桶。

Java的hastable实现是一个“基于桶的哈希表” 这是buckets

的图形

还有其他结构,如四叉树,也使用这样的桶。

在你的情况下,你有sqrt(n)桶。

答案 3 :(得分:0)

我称之为分段数组。我在将句柄映射到指针时使用了这些。

答案 4 :(得分:0)

它也与Van Emde Boas Tree的第一级非常相似。

Van Emde Boas Tree在第一级存储sqrt(n)指针,但在较低级别有额外的树,而不是像这个问题中的简单数组。

答案 5 :(得分:0)

这本身并不是数据结构。似乎这种技术可以用于其他集合类型的数据结构中。

编辑: 它绝对是一种存储或组织数据的机制,但我总是将数据结构与存储/检索(读/写)机制相关联。