Методы разрешения коллизий в хеш-таблице?

Middle
1.1k просмотров
AFK Offer AI

Два основных метода. Chaining (цепочки) — каждый бакет хранит список элементов с одинаковым хешем. Open addressing — при коллизии ищешь следующую свободную ячейку (linear probing, quadratic probing, double hashing).

Go map использует chaining: каждый бакет хранит 8 пар + overflow-указатель. Chaining проще, но больше аллокаций. Open addressing лучше по cache locality, но сложнее удаление.

Robin Hood hashing — вариант open addressing с выравниванием расстояний, используется в Rust hashmap.

Следующий вопрос

Как избежать deadlock?