Какая асимптотика обращения к элементу динамического массива

«Какая асимптотика обращения к элементу динамического массива» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Обращение к элементу динамического массива (среза) в Go имеет константную сложность O(1). Это достигается благодаря тому, что срез — это структура, содержащая указатель на массив, длину и емкость.

Пример:

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

Нюансы:

  • Время доступа не зависит от размера массива
  • Работает одинаково быстро для любого элемента
  • Под капотом используется обычная адресная арифметика (базовый адрес + смещение)