【发布时间】:2013-04-11 21:38:18
【问题描述】:
有一个对研究项目有用的数据结构的想法,并想看看它是否已经有一个名称或 STL 等价物:
创建一个大小为n 的稀疏数组作为sqrt(n) 指针数组。
要在i 处插入项目,请转到i/sqrt(n) 处的指针。如果该指针是null,则将其分配给大小为sqrt(n) 的新数组。将您的项目插入新数组的位置i mod sqrt(n)。
优点很简单:它允许您创建一个最初只占用O(sqrt(n)) 空间的大型数组。您可以在恒定时间内访问任何元素,它允许您填充数组的某些部分,而无需为所有 n 位置分配空间。
这可能已经用于哈希表分桶,我想到了另一个应用程序(在非常大的 DNA 序列中记忆重叠群)。我的问题是:这个有名字吗?我可以使用任何常见的实现吗?
【问题讨论】:
-
对于那些寻求实现的人来说,谷歌几乎用所谓的稀疏表来做到这一点,除了使用恒定大小的桶而不是与表大小成比例的桶。 google-sparsehash.googlecode.com/svn/trunk/doc/…
标签: arrays algorithm data-structures