繁体   English   中英

在向量与集合中搜索性能

[英]Searching performance in vectors vs set

在阅读了以下几个问题和答案之后:

在集合中查找比在向量中渐近更快。 (因为一个集合基本上是一个二叉搜索树)。 对于手头的任务,set比vector更快,因为它保持其内容排序并进行二进制搜索以找到指定的项目,给出对数复杂度而不是线性复杂度。

我的问题是 - 将使用二进制搜索在排序向量中搜索元素与搜索集合中的元素同时进行搜索吗? 如果没有,那么性能差异背后的原因是什么?

我认为你不太可能看到很多性能差异。

我在Stack Overflow上看过其他与性能相关的问题。 现在有很多非常好的材料出现在标准容器的性能上,特别是我们现在在硬件中获得的高速缓存的速度和大小。

这是一段视频,其中Herb Sutter详细介绍了std::vector的性能; http://channel9.msdn.com/Events/Build/2014/2-661 Herb Sutter在23:30左右用非常漂亮的图表,图表,解释等详细介绍了一些细节,他在周围拾取了Bjarne的材料。 46:00大关。

如果你可以保持向量排序,并使用std::lower_bound ,则两者的搜索都是O(lg(n)) 需要注意的是std::vector享有更好的局部性,等等大多数机器都会有一个明显更低的常数因子。 由于碎片较少,它也可能导致更高效的内存使用 - 如果您事先了解最大大小,并且可以使用std::vector<>::reserve ,则尤其如此。

两者将具有相同的渐近性能,因为在集合中需要O(log(n))时间,并且当向量被排序并且使用二进制搜索搜索元素时 - 时间复杂度将再次为O(log(n))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM