← Все вопросы

Что такое хеш-таблица и почему словарь в Python такой быстрый?

Задан 18 месяцев назад913 просмотров3 ответа
20

Слышал, что словарь (dict) внутри — это хеш-таблица и поэтому поиск по ключу «мгновенный». Как это работает? Почему найти значение по ключу быстрее, чем искать элемент в списке?

3 ответа

26
✓ Принятый ответ — помог автору

Идея такая: когда ты кладёшь ключ в словарь, от ключа считается хеш — число. Это число говорит, в какую «ячейку» памяти положить значение. Когда ищешь по ключу — снова считаешь хеш и сразу прыгаешь в нужную ячейку, не перебирая остальные. Поэтому поиск в среднем O(1) — не зависит от размера словаря.

В списке, чтобы найти элемент, надо в худшем случае пройти все n штук — это O(n). Вот почему x in my_dict намного быстрее, чем x in my_list на больших данных.

Плата за скорость — словарь занимает больше памяти и ключи должны быть хешируемыми (неизменяемыми): строки, числа, кортежи — можно, список — нельзя.

Михаил Стецов автор: исчерпывающе · 18 месяцев назад
Карина Никитина теперь понятно почему list нельзя ключом 🙏 · 18 месяцев назад
11

Коротко: список ищет перебором (O(n)), словарь — по адресу из хеша (O(1) в среднем). Поэтому для проверки «есть ли элемент» бери set/dict, а не список.

7

Бывают коллизии (два ключа дали один хеш), их разруливают внутри, поэтому формально «в среднем» O(1), а в патологическом худшем — O(n). На практике почти всегда O(1).

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект