【发布时间】:2011-01-18 09:43:41
【问题描述】:
我需要一些帮助来用 C/C++ 编写算法(尽管任何语言示例都可以)。目的是一个容器/数组,它允许在任何索引处插入。但是,如果在与现有索引不接近的索引中插入元素,即会导致大量的空桶空间。然后数组将最小化空桶。
假设您有一组元素需要插入到以下索引处:
14
54
56
57
12
8
6
5678
一个连续的数组会产生一个数据结构。像这样的:
0
1
2
3
4
5
6 val
7
8 val
9
10
11
12 val
...
但是,我正在寻找一种解决方案,当索引不在其最近邻居的 x 个存储桶内时创建一个新数组。
类似这样的:
Array1
6 val
7
8 val
10
11
12 val
13
14 val
Array2
54 val
56 val
57 val
Array 3
5678 val
然后在查找过程中使用某种索引映射来查找索引所在的数组。我的问题是我应该在插入期间使用哪种算法将索引组合在一起? (同时仍然保持良好的空间/时间折衷)
编辑: 感谢您到目前为止的答案。我要查看的数据将包含一两个非常大的索引范围,没有间隙,然后是一两个非常大的间隙,然后可能是几个“散乱的”单个值。还要对数据进行排序,所以哈希表就出来了。
【问题讨论】:
-
如果您不必专门使用数组,请获取索引,将其包装在对象中并将其用作哈希键。那么你仍然只能有一个具有该索引的对象,并且你没有太多任意大的存储桶。
-
FWIW,您可能会发现关于我的问题的一些讨论很有趣:stackoverflow.com/questions/2267331/…