【问题标题】:What is the time-complexity of this program (c++)这个程序的时间复杂度是多少(c++)
【发布时间】:2022-09-22 21:50:35
【问题描述】:

代码:

#include <iostream>
#include <vector>
 
template<typename T>
std::vector<T> flatten(std::vector<std::vector<T>> const &vec)
{
    std::vector<T> flattened;
    for (auto const &v: vec) {
        flattened.insert(flattened.end(), v.begin(), v.end());
    }
    return flattened;
}
 
int main()
{
    std::vector<std::vector<int>> vec {
        { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 }
    };
 
    std::vector<int> flattened = flatten(vec);
    for (int &i: flattened) {
        std::cout << i << \' \';
    }
 
    return 0;
}

上面代码的时间复杂度是O(n)还是O(n^2)?我知道这只是一个 for() 循环,但是在 for 循环中使用 insert() 会使其变为 O(n^2)?

  • 问问自己你的循环检查了多少次相同的元素。也问问自己在哪里插入发生,以及必须洗牌多少个值才能在该位置为其腾出空间。
  • 还要考虑将值插入flattened 时可能需要的重新分配。
  • 重新分配以增加std::vector 的摊销时间复杂度是恒定的。
  • 第一个要回答的问题是:n 是什么?您发布的代码始终具有相同的输入,所有硬编码值,它不能增加,因此运行代码需要恒定的时间(以不依赖于输入大小的其他因素为模)
  • 仅考虑 flatten 函数,n 可以是元素的总数、外部向量的数量或内部向量的数量

标签: c++ time-complexity big-o code-complexity


【解决方案1】:

O(Σ我=0n一世),

在哪里n是外部向量的大小,并且一世是的大小一世内部向量。

如果外向量的大小和内向量的大小都由n, 相当于 O(n2)。

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2020-12-03
    • 2015-06-17
    • 2017-09-11
    相关资源
    最近更新 更多