二进制搜索是否具有deque C ++数据结构的对数性能?

时间:2011-06-23 14:17:56

标签: c++ complexity-theory binary-search performance deque

标准表示如果数据结构具有随机访问权限,则std::binary_search(...)和两个相关函数std::lower_bound(...)std::upper_bound(...)为O(log n)。所以,鉴于此,我假设这些算法在std::deque上具有O(log n)性能(假设其内容由用户保持排序)。

然而,似乎std::deque的内部表示很棘手(它被分成块),所以我想知道:O(log n)搜索的要求是否适用于std::deque。< / p>

3 个答案:

答案 0 :(得分:8)

是的,它仍适用于deque,因为容器需要在恒定时间内提供对任何元素的访问权限(仅比vector略高一些)。

这并不能免除你对deque进行排序的义务。

答案 1 :(得分:1)

是。 deque对索引有持续的时间访问权限。它以相同大小的页面组织。你有什么是smth。像一个指向页面的指针向量。如果您说2个页面包含100个元素,并且您想要访问103个元素,而不是通过103/100 = 1确定页面,并确定页面中的索引103%100 =&gt; 3.现在在两个向量中使用常量时间访问来获取元素。

来自http://www.cplusplus.com/reference/stl/deque/的声明:

  

Deques可以通过不同方式由特定库实现,但在所有情况下,它们允许通过随机访问迭代器访问各个元素,并始终自动处理存储(根据需要进行扩展和收缩)。

答案 2 :(得分:0)

只需编写一个程序来测试,我认为deque的binary_search实现速度会慢于vector,但它的复杂性仍然是O(logn)