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

标签 arrays algorithm data-structures

有一个对研究项目有用的数据结构的想法,想看看它是否已经有了名称或 STL 等效项:

创建一个大小为 n 的稀疏数组作为 sqrt(n) 指针数组。

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

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

这可能已经用于哈希表分桶,我还有另一个应用(内存非常大的 DNA 序列中的重叠群)。我的问题是:这个有名字吗?我可以使用任何常见的实现吗?

最佳答案

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

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

希望这对您有所帮助!

关于arrays - 这个数组数据结构的名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16088606/

相关文章:

arrays - 在 swift 3 中使用 Json

java - 如何创建一个新数组并将另一个数组中的所有正元素复制到新数组中并返回它?

java - java中内部类初始化的泛型数组

algorithm - 用高级语言练习算法和数据结构是次优的吗?

algorithm - 使用标签重新排列树

algorithm - 重新排序列表的元素,以便连续的元素彼此成功?

Java数据结构建议

algorithm - 如何实现只有一个指针的双向链表?

Java 对象变量数组变化

algorithm - 抢占式 SSTF 算法