【问题标题】:Does binary search have logarithmic performance of deque C++ data structure?二进制搜索是否具有双端 C++ 数据结构的对数性能?
【发布时间】:2011-09-21 06:47:47
【问题描述】:

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

但是,std::deque 的内部表示似乎很棘手(它被分成了块),所以我想知道:对于 std::deque,O(log n) 搜索的要求是否成立。

【问题讨论】:

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


    【解决方案1】:

    是的,它仍然适用于 deque,因为容器需要在恒定时间内提供对任何元素的访问(只是比 vector 稍高的常数)。

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

    【讨论】:

    • +1 表示第一个正确答案。虽然我会说 specified 提供恒定时间而不是“设计”:-)。 (规范要求恒定时间operator[]。)此外,binary_search 的要求并不是真正的恒定时间operator[],而是使用“随机访问”迭代器。这些往往一起去。
    【解决方案2】:

    是的。如果索引存在,则 deque 对索引具有恒定的时间访问权限。它以相同大小的页面组织。你有的是smth。就像一个指向页面的指针向量。如果您有 2 个包含 100 个元素的页面,并且您想访问第 103 个元素而不是通过 103/100 = 1 确定页面并通过 103 %100 => 3 确定页面中的索引。现在使用恒定时间访问两个向量来获取元素。

    这里是http://www.cplusplus.com/reference/stl/deque/的声明:

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

    【讨论】:

      【解决方案3】:

      写个程序测试一下,我觉得deque实现binary_search会比vector慢,但复杂度还是O(logn)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-07
        • 2011-10-27
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2023-03-17
        • 2017-08-15
        • 1970-01-01
        相关资源
        最近更新 更多