二进制数据结构,用于快速搜索
Binary data structure for fast searching
我正在寻找一个二进制数据结构(树,列表),使非常快速的搜索。我只会在程序的开头/结尾添加/删除项目,而且是一次性的。它的大小是固定的,所以我并不关心插入/删除的速度。基本上,我正在寻找的是一个结构,提供快速搜索,不使用太多的内存。
谢谢
在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倍,它们倾向于使用更多的内存,除非你使用大量的元素。
- 二进制搜索不适用于特定输出
- C++ 中用于搜索字符串模式的正则表达式
- 如何向 g++ 编译器解释如何读取用于从'list'文件中搜索 .h 文件的'include'目录列表
- 用于搜索的给定代码的时间复杂度是多少
- 为什么此基准代码用于线性和二进制搜索不起作用
- 用于高效搜索的数据结构
- Qt C++macOS问题。我正在使用函数 .find( "a word") 在多集中搜索单词,它适用于 Windows 但不适用于 mac
- 用于二分搜索的错误简单功能(C++)
- 此TreeVisitor函数如何用于此二进制搜索树分配
- 返回 std::p air<const CustomClass &, bool> 用于搜索函数中的失败情况,当 CustomClass 是抽象基类时
- 用于子图像的大图像的C 搜索块
- C++:用于快速搜索的数据结构
- C API用于弹性搜索
- C++,用于在大文件中的行上搜索单词的算法
- 将filter应用于Ldap搜索也会对结果进行排序
- 用于搜索位阵列以查找连续设置/清除位的快速代码
- 二叉搜索不适用于 n = 1, 2
- 邻接列表,用于创建图形和广度优先搜索 (BFS) 和 Fepth First Search (DFS)
- C++用于搜索和索引的框架,如 clucene
- 看似有效的算法,用于在不浪费空间的情况下将二叉搜索树存储在数组中