【问题标题】:What is the Time Complexity of std::multiset::count in C++?C++ 中 std::multiset::count 的时间复杂度是多少?
【发布时间】:2020-07-15 23:09:21
【问题描述】:

我对在 size n 的多重集中为某些 元素 x 调用 count(x) 时发生的操作数量感到困惑。

我是否正确操作数是 log(n) + #_of_matches_of_x,这意味着 multiset 中的元素数量加上 multiset 中所有元素中目标元素 x 的匹配数的对数?

感谢您的宝贵时间!

【问题讨论】:

  • 如有疑问,请查看参考网站,例如:en.cppreference.com/w/cpp/container/multiset/count
  • 我做到了,我只是不明白时间复杂度的线性部分是什么意思。
  • 线性意味着 O(N)
  • 但更具体地说,就操作次数而言...
  • 是目标元素的匹配数吗?

标签: c++ c++11 stl std multiset


【解决方案1】:

正如reference link 所提到的,计数的复杂性是:

容器大小的对数加上数量的线性 找到的元素。

原因是std::multiset是一个树状数据结构,每个树节点都有一个容器。所以,当调用std::multiset::count时,你应该首先在树中找到键O(log(All elements)),然后计算找到的节点(O(found elements))中的元素。

【讨论】:

    【解决方案2】:

    这个site明确说明multiset::count的复杂度是

    大小成对数,匹配数成线性。

    或者您可以查看此one

    容器大小的对数加上找到的元素数量的线性。

    好吧,我为你拿出了一篇有趣的文章。 (Link)

    【讨论】: