我正在寻找在一个已排序的固定32位键数组中进行最快搜索的方法。该数组的大小和数据是静态的,永远不会改变。这个数组的大小大约是1000到10000个唯一元素。搜索范围显著较广(大约为100000),因此很多搜索值将无法找到。我只对完全匹配感兴趣。
搜索过程如下:
1. 生成大约100个键。这些键按相关性排序,因此不能简单地排序。 2. 在静态数组集合中搜索这组大约100个键(通常在50到300个数组之间)。 3. 在找到足够的匹配结果时停止搜索(因此不对键进行排序以获取最相关的结果非常重要)。
键的可能有趣的属性是,即使它们在整数值方面不接近,大多数键与其最接近的邻居之间仅有几个不同的位(约为1-4个位)。
我发现的大部分答案都指向二分查找,但没有处理静态数组的情况,这可能打开了一些优化可能性。
我完全控制数据结构,现在它是一个固定的排序数组,但如果不是最优的话,我可以进行更改。如果数据不发生变化,则我也可以添加预计算信息,前提是不需要使用过多的内存。
目标是在CPU和内存方面都高效,尽管CPU是首要考虑因素。
使用C++,但这可能不会对答案产生太大的影响。
搜索过程如下:
1. 生成大约100个键。这些键按相关性排序,因此不能简单地排序。 2. 在静态数组集合中搜索这组大约100个键(通常在50到300个数组之间)。 3. 在找到足够的匹配结果时停止搜索(因此不对键进行排序以获取最相关的结果非常重要)。
键的可能有趣的属性是,即使它们在整数值方面不接近,大多数键与其最接近的邻居之间仅有几个不同的位(约为1-4个位)。
我发现的大部分答案都指向二分查找,但没有处理静态数组的情况,这可能打开了一些优化可能性。
我完全控制数据结构,现在它是一个固定的排序数组,但如果不是最优的话,我可以进行更改。如果数据不发生变化,则我也可以添加预计算信息,前提是不需要使用过多的内存。
目标是在CPU和内存方面都高效,尽管CPU是首要考虑因素。
使用C++,但这可能不会对答案产生太大的影响。