Какова асимптотика (сложность) доступа к элементу слайса по индексу?

Ответ

Доступ к элементу слайса по индексу в Go имеет константную временную сложность O(1).

Это одна из самых быстрых операций, и её время выполнения не зависит от размера слайса.

Почему O(1)?

Слайс в Go — это легковесная структура (заголовок), которая содержит три поля:

  • Указатель (pointer) на начало базового (underlying) массива в памяти.
  • Длина (length) — количество элементов, доступных в слайсе.
  • Ёмкость (capacity) — общий размер базового массива от указателя до его конца.

При доступе по индексу s[i], Go выполняет простую адресную арифметику: адрес_начала_массива + i * размер_элемента. Эта операция имеет постоянное время выполнения.

// Время доступа к s[2] и s[999] одинаково
s := []int{1, 2, 3, 4, 5} 
element := s[2]  // O(1) - моментальный доступ

Таким образом, доступ к любому элементу, будь то первый или последний, происходит одинаково быстро.