繁体   English   中英

什么算法最适合具有索引分组的非连续数组?

[英]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 实现

我相信你正在寻找一个哈希映射或更普遍的地图。 您可以使用STL提供的地图类。

这听起来就像你在寻找:

http://www.cplusplus.com/reference/stl/map/

为什么不使用哈希表/字典呢? 如果你真的需要这个具体的东西,我想到的第一件事就是B树。 但是可能还有更好的解决方案。

您正在寻找使用稀疏数组或某种哈希值,具体取决于具体情况。 一般来说:

  1. 如果你最终会被长间隔的大间隙分开填充桶,那么你最好使用稀疏阵列,因为它们在这种情况下可以很好地优化内存使用。
  2. 如果你最后只是在一个巨大的空洞海中分散了条目,你最好用哈希。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM