Назад к вопросам
OZON
Middle+
10
Как устроена хэш-таблица? Какие базовые принципы в неё заложены, основные требования?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Хэш-таблица — это структура данных, которая обеспечивает быстрый доступ к элементам по ключу. Основной принцип — использование хэш-функции для преобразования ключа в индекс массива, где хранится значение.
Базовые принципы:
- Хэш-функция: преобразует ключ в целочисленный индекс.
- Разрешение коллизий: так как разные ключи могут иметь одинаковый индекс, применяются методы, например, цепочки (linked lists) или открытая адресация.
- Динамическое расширение: при достижении определённой нагрузки (load factor) таблица увеличивается, чтобы сохранить эффективность.
Основные требования:
- Быстрая и равномерная хэш-функция, минимизирующая коллизии.
- Эффективное разрешение коллизий.
- Поддержка операций вставки, поиска и удаления с амортизированной сложностью близкой к O(1).
Пример на Go (упрощённый):
type HashTable struct {
buckets [][]KeyValue
}
type KeyValue struct {
key string
value interface{}
}
func (ht *HashTable) hash(key string) int {
var hash int
for _, c := range key {
hash = 31*hash + int(c)
}
return hash % len(ht.buckets)
}
func (ht *HashTable) Put(key string, value interface{}) {
index := ht.hash(key)
// добавляем или обновляем в цепочке
}
func (ht *HashTable) Get(key string) (interface{}, bool) {
index := ht.hash(key)
// ищем в цепочке
return nil, false
}
Это базовый пример, в реальных реализациях учитываются расширение, удаление и оптимизации.