用于高效搜索的数据结构
Data structure for efficient search
我正在寻找在以下情况下使用的适当数据结构的建议我为例如的键定义了最小值和最大值。
Key Min Value Max Value
key1 0 .5 4.5
key2 1 9
key3 0.75 1.5
我必须将每个值分解为进一步的子存储桶,以便最小值和最大值之间的差异不能超过 1,并且每个存储桶的最小值将增加 0.5。
例如,key1 将进一步分解
Key Bucket Min Value Max Value
key1 B1 0.5 1.5
key1 B2 1 2
key1 B3 1.5 2.5
key1 B4 2 3
key1 B5 2.5 3.5
key1 B6 3 4
key1 B7 3.5 4.5
创建这些存储桶后(只有一次(,我需要为给定的键和值找到符合条件的存储桶。
例如,key1 和 2.2 的合格存储桶是 B3 和 B4。
目前,我正在将所有存储桶存储在std::map<Key, std::vector<Buckets> >
其中 Buckets 是将存储桶名称、最小值和最大值作为变量的结构。
除了std::map<Key, std::vector<Buckets> >
之外,我还可以使用什么其他选择来加快搜索过程?
您可以将所有记录放入std::vector
中,然后使用 std::map<key, vector-index>
。 这称为创建索引表。
对于少量数据,线性搜索与使用索引表没有区别(实际上可能更快(。
在互联网上搜索"第一范式",寻找优化数据的方法。
对
std::vector
进行线性搜索(如果排序std::binary_search
(在现代硬件上表现得非常好。连续的内存布局对缓存层次结构和预取程序非常友好。 std::vector
通常会击败基于节点的容器,这些容器必须在内存中追逐指针(即使像 BigO 这样的东西会告诉你它会丢失很大(。但是,您始终必须针对您的特定用例对不同的解决方案进行基准测试,以确定。
相关文章:
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 用于高效搜索的数据结构
- 多种搜索组合的数据结构设计
- 哪种数据结构是在一个向量中搜索和计数对象对的最佳数据结构
- 获取成功的二进制搜索树C 数据结构
- C++:用于快速搜索的数据结构
- 仅使用点云作为查询点的D维k近邻搜索的C++数据结构
- 如何为搜索应用程序找到正确的数据结构
- 可以处理随机访问和键搜索的数据结构是什么?
- 在C++中搜索合适的数据结构以推入向量
- 二叉搜索树问题和数据结构问题
- 范围搜索的数据结构(重新访问)
- 读取大部分数据结构以压缩和搜索源代码
- 用于插入数据而非搜索的最快数据结构
- 我怎么知道一个数据结构按值搜索的平均复杂度
- 在c++中使用深度优先搜索查找图数据结构中所有可能的路径
- 在C++中存储和搜索短语的最佳数据结构
- 正确的数据结构,实现快速插入和快速搜索
- 搜索和更新整数值列表最快的数据结构是什么?
- 二进制数据结构,用于快速搜索