Какова алгоритмическая сложность поиска в List и Dictionary? Как устроен Dictionary внутри?

Алгоритмическая сложность:

Короткий ответ

Что ответить на собеседовании

Алгоритмическая сложность:

Подробный разбор

Ответ с пояснениями

Алгоритмическая сложность:

  • Поиск в List (например, List<T> в C#) — обычно это линейный поиск, сложность O(n), так как приходится перебирать элементы по порядку.
  • Поиск в Dictionary — средняя сложность O(1), так как используется хеш-таблица.

Устройство Dictionary:

Dictionary<TKey, TValue> в C# реализован на основе хеш-таблицы. Ключ хешируется с помощью хеш-функции, которая преобразует ключ в индекс массива бакетов. Каждый бакет содержит связанный список или другую структуру для разрешения коллизий. При добавлении или поиске элемента происходит:

  1. Вычисление хеша ключа.
  2. Определение бакета по хешу.
  3. Поиск в бакете по ключу (сравнение с помощью Equals).

Это обеспечивает быстрый доступ к значениям по ключу при условии хорошего распределения хешей.

Пример:

var dict = new Dictionary<string, int>();
dict["apple"] = 5;
int value = dict["apple"]; // Быстрый доступ

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку