【发布时间】:2012-08-17 12:32:16
【问题描述】:
我有一组连续的整数值和对应的一组非连续值,例如:
0 -> 22
1 -> 712
2 -> 53
3 -> 12323
...
等等。
项目数量非常庞大(大约为 10^9...10^10),因此不能只使用普通数组。
是否存在能够从第一个值快速映射到另一个具有中等内存需求的数据结构?例如:
ret = map(0); // returns 22
ret = map(3); // returns 12323
编辑:该集合中的值实际上是使用伪随机数生成器生成的,因此无法建议某些特定分布。问题是 - 是否可以降低内存要求(可能是以查找速度为代价)?我的意思是使用“完美哈希”之类的东西——生成这种“完美哈希”所需的时间并不重要。
【问题讨论】:
-
在你的例子中,你的关系是 1;1,是现实还是这个例子的特征/
-
@High Performance Mark 是的,每个索引只有一个关联的值,因此仅由于内存需求,无法使用数组。
-
您说的内存要求适中,但 10^10 int -> int 将在不压缩的情况下运行 100s GB。您能告诉我们有关数据集的其他信息吗?
-
您可以将数组存储在文件中,这会减慢速度。坦率地说,我没有看到任何方法(除了压缩)将相同的数据放入内存中。
-
如果第二组值是完全随机的,你怎么能比普通数组使用更少的内存?
标签: c algorithm data-structures