Sobes.tech
Junior — Middle

Jaki jest poziom złożoności czasowej operacji dodania elementu na końcu tablicy za pomocą slice'a?

sobes.tech AI

Odpowiedź od AI

W Go operacja dodania elementu na koniec slice'a (append) ma amortyzowaną złożoność czasową O(1).

Wyjaśnienie:

  • Jeśli slice ma wystarczającą pojemność (capacity), dodanie elementu polega na zapisaniu go w następnym wolnym indeksie — jest to operacja o czasie stałym.

  • Jeśli pojemność jest niewystarczająca, alokowany jest nowy, większy tablica, stare elementy są kopiowane, a następnie dodawany jest nowy — ta operacja zajmuje O(n), gdzie n to obecny rozmiar slice'a.

Jednakże, ponieważ takie ponowne alokacje nie zachodzą przy każdym dodaniu, lecz tylko okresowo, średnia (amortyzowana) złożoność dodawania pozostaje O(1).