有一个对研究项目有用的数据结构的想法,并想看看它是否已经有一个名称或 STL 等价物:
创建一个大小n
为sqrt(n)
指针数组的稀疏数组。
要在 处插入项目i
,请转到 处的指针i/sqrt(n)
。如果该指针是null
,则将其分配给一个新的大小数组sqrt(n)
。将您的项目插入新数组的位置i mod sqrt(n)
。
优点很简单:它允许您创建一个最初只O(sqrt(n))
占用空间的大型数组。您可以在恒定时间内访问任何元素,它允许您填充数组的某些部分,而无需为所有n
位置分配空间。
这可能已经用于哈希表分桶,并且我想到了另一个应用程序(在非常大的 DNA 序列中记忆重叠群)。我的问题是:这个有名字吗?我可以使用任何常见的实现吗?