【问题标题】:Why is the std::map::operator[] logarithmic in complexity relative to number of keys?为什么 std::map::operator[] 的复杂性与键的数量成对数?
【发布时间】:2015-05-27 10:37:12
【问题描述】:

有人能解释一下为什么 std::map 下标运算符方法的复杂性是对数(而不是线性),相对于映射中的键数?

(我确信这是一个非常基本的问题,但我是计算复杂性的新手)

【问题讨论】:

    标签: c++ dictionary time-complexity


    【解决方案1】:

    您很可能认为std::map 是一个具有线性复杂性(最坏情况)的哈希表。

    另一方面,std::map 是 SORTED ,这使事情变得很复杂。有了这个要求,您就被限制在可以支持排序的数据结构(通常是红/黑树)上,从中可以得到对数复杂度。

    另一方面,std::unordered_map 具有线性复杂度(最坏情况)

    【讨论】:

      【解决方案2】:

      std::map 通常实现为红色/后退树(类似于 B-tree),其深度为 log(n) 并且大致高度平衡(路径长度与root 到任何叶子)因此您最多需要进行 log(n) 比较才能找到任何元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 2017-02-27
        相关资源
        最近更新 更多