Хэш коллизия возникает, когда два разных входных значения дают одинаковое значение хэш-функции. Это неизбежно, так как множество возможных входов обычно больше, чем множество возможных хэш-значений.
Расскажи, пожалуйста, как в Python под капотом работает словарь, и что там по поводу коллизий
Хэш коллизия возникает, когда два разных входных значения дают одинаковое значение хэш-функции. Это неизбежно, так как множество возможных входов обычно больше, чем множество возможных хэш-значений.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Хэш коллизия возникает, когда два разных входных значения дают одинаковое значение хэш-функции. Это неизбежно, так как множество возможных входов обычно больше, чем множество возможных хэш-значений.
Методы разрешения коллизий:
- Открытая адресация — при коллизии ищется следующая свободная ячейка по определённой последовательности (линейное, квадратичное пробирование, двойное хэширование).
- Цепочки (chaining) — в каждой ячейке хэш-таблицы хранится связанный список всех элементов с одинаковым хэш-значением.
- Рехэширование — при коллизии применяется другая хэш-функция.
Пример с цепочками на Python:
hash_table = [[] for _ in range(10)]
def insert(key, value):
index = hash(key) % 10
hash_table[index].append((key, value))
insert('apple', 1)
insert('papel', 2) # возможна коллизия