【问题标题】:Fast binary search/indexing in cc中的快速二进制搜索/索引
【发布时间】:2014-02-02 17:40:35
【问题描述】:

我有一个由 n 个固定大小(24 字节)的元素组成的数据集。我想创建一个索引,以便能够在此数据集中尽快搜索 24 字节的随机元素。我应该使用什么算法?你知道实现这个的 C 库吗?

快速读取访问/搜索速度是首要任务。内存使用和插入速度都不是问题,初始化后几乎没有写访问。

编辑:数据集将存储在内存 (RAM) 中,没有磁盘访问权限。

【问题讨论】:

  • 把它们放在一个数组中。然后可以通过一次偏移计算来访问第 n 个元素。 (我假设您的意思是“按位置搜索”,因为您没有说其他任何内容。)
  • "你知道实现这个的 C 库吗?"是 C 还是 C++?
  • 元素的数量'n'是常数吗?
  • Dieter:是的,N 是常数
  • @barak:256^24 或 2^192 是 6.277e+57 位(Giga-yotta-yotta-bits)。地球上没有这样的机器。

标签: c performance algorithm


【解决方案1】:

如果元素之间存在逻辑排序,则数据的quick sort 是一种快速排序数据的方法。订购后,您可以使用binary search 算法来查找元素。这是一个 O(log N) 搜索,您将很难获得更快的结果!

std::sort可用于数据排序,std::binary_search可用于搜索数据。

【讨论】:

  • 好吧,看来基本的二分搜索是最快的解决方案。
【解决方案2】:

使用散列表,在 STL 中以 std::unordered_map 的形式提供。将击败二分搜索(我敢打赌)。

或者,一个(压缩的)trie (http://en.wikipedia.org/wiki/Trie)。如果你能负担得起内存空间,这确实是最快的。

【讨论】:

  • 散列取决于密钥的分配和填充率,所以请不要说“将击败x”之类的绝对陈述。 ;-)
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2020-11-16
  • 2010-10-25
相关资源
最近更新 更多