Sobes.tech
Junior — Middle

Ako určiť časovú zložitosť operácie odstránenia prvku z poľa typu slice?

sobes.tech AI

Odpoveď od AI

V Go je slice štruktúra, ktorá obsahuje ukazovateľ na pole, dĺžku a kapacitu. Pri odstraňovaní prvku zo slice je zvyčajne potrebné posunúť všetky nasledujúce prvky o jednu pozíciu doľava, aby sa vyplnila "diera".

Časová zložitosť tejto operácie je O(n), kde n je počet prvkov po odstránenom prvku. To je spôsobené tým, že je potrebné skopírovať (n - index_odstráneného - 1) prvkov.

Príklad odstránenia prvku podľa indexu:

func remove(slice []int, i int) []int {
    return append(slice[:i], slice[i+1:]...)
}

Tu append kopíruje prvky z slice[i+1:] na pozíciu za slice[:i], čo vyžaduje lineárny čas v závislosti od počtu kopírovaných prvkov.