我需要一些帮助在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
然后使用某种索引映射来查找索引在查找期间所处的数组。我的问题是我应该在插入过程中将索引组合在一起的是什么样的算法? (同时仍然保持良好的空间/时间权衡)
编辑: 谢谢你到目前为止的答案。我将要查看的数据将包含一个或两个非常大的索引范围,没有间隙,然后是一个或两个非常大的间隙,然后可能是一些“分散”单个值。此外,数据需要进行排序,因此散列表已经完成。
答案 0 :(得分:3)
也许你想要的是一个稀疏的向量?试试Boost implementation。
答案 1 :(得分:2)
答案 2 :(得分:2)
为什么不使用哈希表/字典呢?如果你真的需要这个具体的东西,我想到的第一件事是B tree.但是可能有更好的解决方案。
答案 3 :(得分:2)
您正在寻找使用稀疏数组或某种哈希值,具体取决于具体情况。一般来说: