【问题标题】:Why is the complexity of the C++ STL map container O(log(n))?为什么 C++ STL map 容器的复杂度是 O(log(n))?
【发布时间】:2012-06-29 09:35:05
【问题描述】:

对于vectorlist 等C++ STL 容器,查找元素以及插入或删除元素的复杂性是不言自明的。然而,对于map 容器,即使我从阅读中知道访问和插入复杂性/性能为 O(log(n)),我也无法弄清楚为什么。我显然没有像我需要的那样了解地图,因此非常感谢您对这个主题的一些启发。

【问题讨论】:

标签: c++ performance stl map


【解决方案1】:

地图或集合的元素包含在树结构中;每次检查树的节点时,您都​​会确定您尝试查找/插入的元素是否小于或大于该节点。您需要执行此操作的次数(对于正确平衡的树)是 log2(N),因为每次比较都会抛出一半的可能性。

【讨论】:

  • 谢谢你,马克,你的回答正是我所需要的。
  • @EdKing,看看red-black trees。它们通常用于实现 std::map。
【解决方案2】:

作为 slavik262 点,地图通常使用自平衡的红黑树实现。 检查红黑树的复杂性,例如在wikipedia 我不知道带有二叉树的地图的任何实现;如果 Mark Ransom 知道一个,我很高兴知道是哪一个。

【讨论】:

  • 我认为可以说红黑树二叉树,只是在树的形状上有一些不变量和重新平衡操作来维护这些在插入和删除期间。
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2022-10-24
  • 2021-11-11
  • 2011-07-09
  • 2018-11-26
  • 2012-01-18
  • 2018-03-19
  • 2021-08-13
相关资源
最近更新 更多