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

时间:2011-08-15 15:13:11

标签: c++ linked-list hashtable binary-tree

我正在寻找能够实现快速搜索的二进制数据结构(树,列表)。我只会在程序的开头/结尾添加/删除项目。因此它将是固定大小的,因此我并不真正关心插入/删除速度。基本上我正在寻找的是一种提供快速搜索并且不会占用太多内存的结构。

由于

6 个答案:

答案 0 :(得分:6)

在Boost C ++库here中查找无序集。与用于搜索的O(log n)的红黑树不同,无序集基于散列,并且平均为您提供O(1)搜索性能。

答案 1 :(得分:4)

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

它肯定会赢得内存消耗,特别是如果你能预先保留()正确的数量。

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:0)

一个有效的(虽然有点令人困惑)算法是Red-Black tree

在内部,c ++标准库使用红黑树来实现std::map - 请参阅this question

答案 4 :(得分:0)

std::map和哈希地图是不错的选择。它们还具有构造器以便于一次性构造。

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

我的偏好是std::map,因为它通常被实现为一种二叉树。

答案 5 :(得分:0)

最快的往往是trei / trie。我比std :: unordered_map快3到15倍,他们倾向于使用更多的ram,除非你使用大量的元素。