为什么 C++ STL 映射容器的复杂性为 O(log(n))
Why is the complexity of the C++ STL map container O(log(n))?
对于C++ STL 容器(如 vector
和 list
),查找元素和插入或删除元素的复杂性是不言自明的。但是,对于map
容器,即使我从阅读中知道访问和插入的复杂性/性能为 O(log(n)),我也无法弄清楚原因。我显然没有像我需要的那样了解地图,因此非常感谢有关此主题的一些启发。
映射或集合的元素包含在树结构中;每次检查树的节点时,您都会确定要查找/插入的元素是小于还是大于节点。您需要执行此操作的次数(对于适当平衡的树)是 log2(N),因为每次比较都会抛出一半的可能性。
作为 slavik262 点,地图通常使用红黑树来实现,它们是自平衡的。例如在维基百科中检查红黑树的复杂性我不知道带有二叉树的地图的任何实现;如果马克·兰塞姆知道一个,我会很高兴知道是哪一个。
相关文章:
- 如何用数字处理log(0)
- 具有未知值时的时间复杂性
- 关联容器的下界复杂性:成员函数与非成员函数
- 使用堆查找第K个最大元素的时间复杂性
- 安装opencv失败-粘贴CMakeError.log的内容
- 并行标准::复制复杂性
- 特定算法的复杂性与 3 for?
- C++ 字符串类擦除成员函数的时空复杂性
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- C++ - 对象填充的复杂性
- 提高从排序字符串中获取字母顺序的顺序复杂性
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 从 long 转换C++位集构造函数的复杂性是多少?
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 向 std::list 添加新元素的复杂性
- 解决这个问题的时间复杂性是多少
- boost日志文件无法创建sample.log文件
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 为什么 C++ STL 映射容器的复杂性为 O(log(n))