将一个大小为n
的数组实现为sqrt(n)
指针数组。
要在i
插入项目,请转到i/sqrt(n)
处的指针。如果该指针为null
,请将其指定给大小为sqrt(n)
的新数组。将您的项目插入位置i mod sqrt(n)
的新数组中。
优点很简单:它允许您创建一个最初只占用O(sqrt(n))
空间的大型数组。您可以在恒定时间内访问任何元素,并且它允许您填充数组的部分,而无需为所有n
位置分配空间。
这可能已经用于哈希表,我还有另一个应用程序。我的问题是:这有名字吗?我可以使用任何常见的实现?
答案 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)
答案 3 :(得分:0)
我称之为分段数组。我在将句柄映射到指针时使用了这些。
答案 4 :(得分:0)
它也与Van Emde Boas Tree的第一级非常相似。
Van Emde Boas Tree在第一级存储sqrt(n)指针,但在较低级别有额外的树,而不是像这个问题中的简单数组。
答案 5 :(得分:0)
这本身并不是数据结构。似乎这种技术可以用于其他集合类型的数据结构中。
编辑: 它绝对是一种存储或组织数据的机制,但我总是将数据结构与存储/检索(读/写)机制相关联。