用于高效搜索的数据结构

Data structure for efficient search

本文关键字:数据结构 搜索 高效 用于      更新时间:2023-10-16

我正在寻找在以下情况下使用的适当数据结构的建议我为例如的键定义了最小值和最大值。

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 这样的东西会告诉你它会丢失很大(。但是,您始终必须针对您的特定用例对不同的解决方案进行基准测试,以确定。