二进制搜索与基于密钥的搜索

时间:2015-11-12 12:51:15

标签: arrays algorithm data-structures redis binary-search

假设我有10000个项目,每个项目由一个id(1,2,3等等)表示。另外,一个密钥可以是任何大到10e6的数字)我可以选择使用密钥值存储(Redis,确切地说)和一个排序的数组。

键值:

{
    1: 1,
    2: 2,
    3: 3 //and so on
}

排序数组:

[1, 2, 3, ...]

现在,如果我想搜索一个项目,那将会更快(以及为什么):

  1. 访问密钥,例如:obj [' 3']或,
  2. 在具有log(N)复杂度的排序数组上应用二进制搜索?
  3. 或者是否有任何其他数据结构比上述两个选项更快。

2 个答案:

答案 0 :(得分:2)

如果域密集(例如1,2,3,4,5而不是1,4,6,18),到目前为止最快的数据结构是一个简单的数组。然后对象的索引是对象id。

如果您的域,也可以使用此功能。如果所有id都小于100,000,你可以简单地创建一个包含100,000个元素的数组,并且有一些值表示缺少元素。

如果没有,那么最佳选择是键值数据结构。它针对此进行了优化。它可以实现为哈希映射或排序树,您可以假设您的编程语言设计者为您选择最佳选项。

如果选择取决于您(例如在C ++中),则哈希映射应该是整数键最快的。

答案 1 :(得分:0)

这完全取决于您希望如何实现第一种方法,即字典。如果您决定使用哈希表,则可以实现预期的O(1)时间访问,但是,详细信息还取决于所选的实现。

请注意,如果您的键不是非常大的整数,则可以使用简单的数组来访问它们。这样做,让我们说你的最大密钥是K,你可以O(1)时间访问O(K)