时间复杂度-创建新数组并在旧数组满n次时从旧数组复制所有元素



设为一个数组,用于存放大小为n的数据溢出我们创建一个新数组,将旧数组中的所有元素复制到我们只是把新数组再大1个

如果数组大小为n,且第一个位置被占用的次数为√n。

插入n个新元素的时间复杂度是多少?

因为在n大小的数组中已经有√n个元素了。还有(n-√n)个空位留给大小为n的数组。我们将(n-√n)个空位插入到数组中我们还剩下√n个元素要插入。数组已满。所以我们要创建一个新数组√n次,并增加一个额外的位置。

时间复杂度:

  1. insert (n -√n) elements into origin array = 0 (n)
  2. 将数组大小n复制到新的数组大小n+1。- - - - - - O (n)
  3. 插入额外的元素。- - - - - - O (1)

我们必须做步骤2和3√n次。

总:O (n) +√nO (n) +√nO(1) =Θ(√n * n)

我的答案正确吗?

是。

没有提到的一个方面是,步骤2中的𝑛+1在第一次执行时只会恰好是𝑛+1,但会是𝑛+2,𝑛+3,…,𝑛+√𝑛

但是,如果我们总是假设每次执行该步骤为0(𝑛+√𝑛),从而为复杂性创建一个上限,那么结果是相同的(我在这里排除了第一阶段的0(𝑛)):

O(√𝑛(𝑛+√𝑛))= O(𝑛√𝑛+𝑛)= O(𝑛√𝑛)

最新更新