49 lines
5.0 KiB
Markdown
49 lines
5.0 KiB
Markdown
---
|
||
aliases:
|
||
- хеш таблица
|
||
- хеш таблице
|
||
- хеш-таблице
|
||
- хеш-таблицу
|
||
- хеш-таблиц
|
||
- хеш таблицу
|
||
- хеш таблиц
|
||
tags:
|
||
- maturity/🌱
|
||
date: 2024-09-17
|
||
zero-link:
|
||
- "[[../../../meta/zero/00 Разработка|00 Разработка]]"
|
||
parents:
|
||
- "[[Структура данных]]"
|
||
linked:
|
||
---
|
||
Хэш-таблица — это [[Структура данных|структура данных]], которая используется для эффективного хранения и поиска данных на основе ключей. Она обеспечивает быстрый доступ к элементам, используя [[../../cryptography/Хеш-функция|хеш-функцию]] для преобразования ключа в индекс массива, где хранится значение. Это делает операции вставки, удаления и поиска очень быстрыми, обычно за время O(1).
|
||
|
||
**Основные концепции хэш-таблицы:**
|
||
- **Ключ и значение:** Каждый элемент в хэш-таблице хранится в виде пары “ключ-значение”. Ключи должны быть уникальными, а значения могут быть любыми. Например, в хэш-таблице можно хранить данные о студентах, где ключом будет идентификационный номер, а значением — информация о студенте.
|
||
- [[../../cryptography/Хеш-функция|Хеш-функция]] Это основа работы хэш-таблицы. Хеш-функция принимает ключ и вычисляет индекс в массиве, где должно быть размещено значение. Например, для ключа “apple” хэш-функция может вернуть индекс 3, и значение будет сохранено в ячейке с индексом 3.
|
||
- **Разрешение коллизий:** Поскольку разные ключи иногда могут давать одинаковый хэш (коллизии), нужно уметь их разрешать. Существуют несколько подходов:
|
||
- **Метод цепочек (Chaining):** В каждой ячейке массива хранится связанный список значений, чьи ключи дали одинаковый хэш. При коллизии элемент добавляется в этот список.
|
||
- **Открытая адресация (Open Addressing):** При коллизии элемент помещается в следующую свободную ячейку массива по определённому алгоритму (например, линейное пробирование или двойное хэширование).
|
||
- **Коэффициент загрузки (Load Factor):** Это соотношение количества элементов к размеру массива. Если коэффициент загрузки слишком велик, производительность хэш-таблицы падает, и может понадобиться увеличение массива и перерасчёт всех хешей (рехеширование).
|
||
|
||
**Преимущества хэш-таблиц:**
|
||
- **Быстрый доступ:** Операции вставки, удаления и поиска обычно выполняются за константное время O(1).
|
||
- **Гибкость ключей:** Могут использоваться любые неизменяемые типы данных в качестве ключей (строки, числа, кортежи и т.д.).
|
||
|
||
**Недостатки хэш-таблиц:**
|
||
- **Память:** Хэш-таблицы могут потреблять много памяти из-за большого размера массива, особенно при низком коэффициенте загрузки.
|
||
- **Коллизии:** Если хеш-функция некачественная или слишком много элементов, это может замедлить работу из-за коллизий.
|
||
- **Нет упорядоченности:** Порядок элементов в хэш-таблице не предсказуем и не сохраняется.
|
||
***
|
||
## Мета информация
|
||
**Область**:: [[../../../meta/zero/00 Разработка|00 Разработка]]
|
||
**Родитель**:: [[Структура данных]]
|
||
**Источник**::
|
||
**Создана**:: [[2024-09-17]]
|
||
**Автор**::
|
||
### Дополнительные материалы
|
||
-
|
||
|
||
### Дочерние заметки
|
||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|