[英]What algorithm is best adapt for a non-contiguous Array with Index Grouping?
我需要一些帮助在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
然后使用某种索引映射来查找索引在查找期间所处的数组。 我的问题是我应该在插入过程中将索引组合在一起的是什么样的算法? (同时仍保持良好的空间/时间权衡)
编辑:感谢您的答案到目前为止。 我将要查看的数据将包含一个或两个非常大的索引范围,没有间隙,然后是一个或两个非常大的间隙,然后可能是一些“分散”单个值。 此外,数据需要进行排序,因此哈希表已经完成。
也许你想要的是一个稀疏的向量? 尝试Boost 实现 。
为什么不使用哈希表/字典呢? 如果你真的需要这个具体的东西,我想到的第一件事就是B树。 但是可能还有更好的解决方案。
您正在寻找使用稀疏数组或某种哈希值,具体取决于具体情况。 一般来说:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.