Какая сложность операций с хеш-таблицей?

«Какая сложность операций с хеш-таблицей?» — вопрос из категории Алгоритмы и структуры данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хеш-таблица, на которой построены ассоциативные массивы в PHP, обеспечивает в среднем константное время выполнения ключевых операций.

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

  • Вставка ($table[$key] = $value): O(1) (амортизированное).
  • Поиск по ключу ($value = $table[$key]): O(1).
  • Удаление по ключу (unset($table[$key])): O(1).

Объяснение "амортизированного O(1)": Иногда при вставке требуется рехеширование (увеличение размера внутреннего массива и пересчет хешей для всех элементов), что стоит O(n). Однако эта дорогая операция происходит редко, и ее стоимость "распределяется" по множеству быстрых вставок, давая в среднем O(1).

Пример на PHP:

$userCache = []; // Хеш-таблица

// Вставка: O(1)
$userCache['user_123'] = ['name' => 'Alice', 'role' => 'admin'];
$userCache['user_456'] = ['name' => 'Bob', 'role' => 'editor'];

// Поиск: O(1)
$aliceData = $userCache['user_123']; // Мгновенный доступ по хешу ключа 'user_123'

// Удаление: O(1)
unset($userCache['user_456']);

// Итерация по всем элементам: O(n)
foreach ($userCache as $id => $data) {
    echo $data['name'];
}

Что влияет на производительность? Качество хеш-функции PHP (минимизирует коллизии) и коэффициент заполнения. В реальности для хеш-таблиц PHP худший случай O(n) почти не наблюдается. Это делает их идеальными для кешей, словарей и быстрого поиска данных по ключу.