Сложность базовых операций

Любая структура данных поддерживает четыре базовые операции:

ОперацияОписание
ПоискНайти элемент по значению или ключу
ВставкаДобавить новый элемент
УдалениеУбрать элемент
ДоступПолучить элемент по позиции или ключу
СтруктураДоступПоискВставкаУдаление
МассивO(1)O(n)O(n)O(n)
Динамический массивO(1)O(n)O(1)*O(n)
Связный списокO(n)O(n)O(1)**O(1)**
Хеш-таблицаO(1)O(1)O(1)
BST (сбал.)O(log n)O(log n)O(log n)O(log n)

* амортизированно; ** при наличии указателя на узел.

// Частый поиск по ключу → map
index := make(map[string]int)
index["alice"] = 42
v := index["alice"] // O(1)

// Частый доступ по позиции → slice
data := []int{10, 20, 30}
x := data[1] // O(1)

// Частые вставки/удаления в середину → list
import "container/list"
l := list.New()
e := l.PushBack(10)
l.InsertAfter(20, e) // O(1)

append к срезу — O(1) в среднем, но O(n) при перевыделении памяти. Амортизированная оценка усредняет стоимость по серии операций.

// Предвыделение избегает многократного копирования
s := make([]int, 0, 1000)
for i := 0; i < 1000; i++ {
    s = append(s, i) // ни одного перевыделения
}

ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2easy
3Упражнение 3medium