标准表示如果数据结构具有随机访问权限,则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>
答案 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)