【发布时间】:2015-05-27 10:37:12
【问题描述】:
有人能解释一下为什么 std::map 下标运算符方法的复杂性是对数(而不是线性),相对于映射中的键数?
(我确信这是一个非常基本的问题,但我是计算复杂性的新手)
【问题讨论】:
标签: c++ dictionary time-complexity
有人能解释一下为什么 std::map 下标运算符方法的复杂性是对数(而不是线性),相对于映射中的键数?
(我确信这是一个非常基本的问题,但我是计算复杂性的新手)
【问题讨论】:
标签: c++ dictionary time-complexity
您很可能认为std::map 是一个具有线性复杂性(最坏情况)的哈希表。
另一方面,std::map 是 SORTED ,这使事情变得很复杂。有了这个要求,您就被限制在可以支持排序的数据结构(通常是红/黑树)上,从中可以得到对数复杂度。
另一方面,std::unordered_map 具有线性复杂度(最坏情况)
【讨论】:
std::map 通常实现为红色/后退树(类似于 B-tree),其深度为 log(n) 并且大致高度平衡(路径长度与root 到任何叶子)因此您最多需要进行 log(n) 比较才能找到任何元素。
【讨论】: