【问题标题】:What is the complexity of set_intersection in C++?C++ 中 set_intersection 的复杂度是多少?
【发布时间】:2012-03-02 17:08:18
【问题描述】:

以下代码的复杂度是多少?

set<int> S1, S2, ans;
set_intersection(S1.begin(), S1.end(), S2.begin(), S2.end(), inserter(ans, ans.begin()))

其中S1S2 是一些非空集,ans 是一个空集。

我知道将已排序的范围插入到集合中是线性的;但是也使用线性插入器插入吗?

【问题讨论】:

    标签: c++ algorithm set time-complexity set-intersection


    【解决方案1】:

    插入器会记住上次插入每个项目的位置,并尝试在同一位置插入下一个项目。如果它是正确的地方,这是 O(1)。

    这意味着将排序范围复制到插入器总体上是线性的,所以你在这里很好。

    【讨论】:

    • 我有点困惑:O(1) 不是常数而不是线性的吗?
    • @AntonioPérez:每次插入都是恒定的;整体线性。