Что быстрее: поиск в массиве или в словаре?

«Что быстрее: поиск в массиве или в словаре?» — вопрос из категории Алгоритмы и структуры данных, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Поиск в словаре (хэш-таблице) в среднем значительно быстрее, чем линейный поиск в массиве.

Сложность операций:

  • Массив (Array): O(n) для поиска по значению (метод contains). Требуется последовательная проверка элементов.
  • Словарь (Dictionary): O(1) для доступа по ключу. Используется хэш-функция для прямого вычисления позиции элемента.

Практический пример на Swift:

let array = ["apple", "banana", "cherry", "date"]
let dictionary = ["apple": 1, "banana": 2, "cherry": 3, "date": 4]

// Медленный поиск в массиве - O(n)
let foundInArray = array.contains("cherry")

// Быстрый поиск в словаре - O(1)
let valueFromDict = dictionary["cherry"]

Ключевые различия и выбор структуры:

  1. Словарь идеален для частых операций поиска, обновления или удаления по уникальному ключу.
  2. Массив предпочтителен, когда важен порядок элементов, нужен последовательный доступ или данные часто сортируются.
  3. Словарь потребляет больше памяти из-за хранения ключей и механизма разрешения коллизий. Для очень маленьких коллекций (n < 10) разница в скорости может быть незаметна.