二进制数据结构,用于快速搜索

Binary data structure for fast searching

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

我正在寻找一个二进制数据结构(树,列表),使非常快速的搜索。我只会在程序的开头/结尾添加/删除项目,而且是一次性的。它的大小是固定的,所以我并不关心插入/删除的速度。基本上,我正在寻找的是一个结构,提供快速搜索,不使用太多的内存。

谢谢

在Boost c++库中查找Unordered集合。与搜索耗时O(log n)的红黑树不同,无序集基于散列,平均搜索性能为O(1)。

不容忽视的一个容器是已排序的std::vector。

它绝对在内存消耗上占上风,特别是如果您可以预先保留()正确的数量。

所以键可以是一个简单的类型,值是一个由五个指针组成的较小的结构。

当只有50个元素时,它开始变得足够小,以至于大0理论性能可能会被算法或结构的固定时间开销所掩盖或至少可测量的影响。

例如,一个数组,一个向量,线性搜索通常是最快的,少于10个元素,因为它的结构简单,内存紧凑。

我会包装容器并在其上运行实时数据。从STL的vector开始,转到标准的STL map,升级到unordered_map,甚至可以尝试Google的dense或sparse_hash_map:http://google-sparsehash.googlecode.com/svn/trunk/doc/performance.html

一种高效(尽管有点令人困惑)的算法是红黑树。

在内部,c++标准库使用红黑树来实现std::map -参见这个问题

std::map和哈希映射是不错的选择。他们也有施工人员来简化一次施工。

哈希映射将关键数据放入返回数组索引的函数中。这可能比std::map慢,但只有分析才能说明。

我更喜欢std::map,因为它通常被实现为一种二叉树。

最快的趋向于树/树。我实现了一个比std::unordered_map快3到15倍,它们倾向于使用更多的内存,除非你使用大量的元素。