向量push_back的空间复杂度

时间:2019-05-09 22:50:58

标签: c++ data-structures space space-complexity

我有首先创建向量(向量B)的代码。 然后,我的代码循环遍历程序中的另一个向量(向量A),并将该索引添加到向量B的后面。

我的想法是,由于我们要遍历n个元素,因此时间复杂度在O(n ^ 2)时会更糟,因为如果向量b太大,我们可能需要创建一个全新的数组。自推后通常O(n)的平均时间是恒定的。

由于我们已经在创建用于容纳n个元素的空间,因此由于空间复杂性,它应该是O(N)。但是,如果向量太大,则可能需要创建O(N)大小的全新向量。因此,我们的空间应该是O(2n)还是O(n)还是O(n + m)(m是新数组的大小)。

谢谢!

1 个答案:

答案 0 :(得分:1)

关于时间复杂度:

单次回退的最坏情况是线性的(除非预先保留了内存,在这种情况下,只要大小不超过保留的大小,最坏的情况就是恒定的)。平均情况是不变的。

无论是否保留内存,最坏的情况和N次推回总数的平均情况都是线性的。


  

那么我们的空间应该是O(2n)还是O(n)还是O(n + m)(m是新数组的大小)。

渐近并不重要。新大小是旧大小的常数倍(c),因此O(n + m) -> O(n + (n * c)) -> O ((c + 1) * n) -> O(n)。因此,两种方法的复杂性都是相同的。