資料結構中的陣列加倍
有時我們使用動態記憶體分配建立陣列。如果陣列是使用動態記憶體分配技術分配的,我們可以透過執行一些操作來將陣列的大小加倍。
假設初始陣列大小為 5。
陣列
| 0 | 1 | 2 | 3 | 4 |
| 元素 1 | 元素 2 | 元素 3 | 元素 4 | 元素 5 |
陣列加倍後,大小為 -
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 元素 1 | 元素 2 | 元素 3 | 元素 4 | 元素 5 | 元素 6 | 元素 7 | 元素 8 | 元素 9 | 元素 10 |
要將大小為 n 的陣列 arr(arr[0…n-1])的大小加倍。首先,我們必須建立一個大小為 m 的新陣列。然後將 arr 中的 n 個元素複製到新陣列中。最後,更改 arr 的值以指向新陣列。
建立大小為 m 的陣列需要 θ(m) 的時間。這是因為它將用一些預設值初始化。然後,它需要額外的 θ(n) 時間才能從舊陣列複製到新陣列。因此,該操作需要 θ(m + n) 的時間。此操作發生在陣列已滿時。通常,m 值與 2n 相同。因此,複雜度為 θ(2n + n) = θ(3n),相當於 θ(n)。但此操作被認為是昂貴的。但是,此操作在後續 n 次迭代中進行攤銷,則每次迭代僅增加 θ(1) 的時間。因此,我們可以理解,陣列大小以常數因子增加不會對漸近複雜度產生不利影響。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP