- •Структуры данных: ограничения
- •Motivation
- •Dictionaries
- •Таблицы поиска
- •Таблицы поиска
- •Простой объект
- •Таблицы прямой адресации
- •Student
- •Таблицы прямой адресации
- •Таблицы прямой адресации
- •Direct Addressing
- •Если ключей меньше, чем элементов массива, то в качестве хэш-функции можно использовать деление
- •Хэширование–это преобразование входного массива данных определенного типа и произвольной длины в выходную битовую
- •Хэширование полезно, когда широкий диапазон возможных значений должен быть сохранен в
- •Hash-функции
- •Hash Functions
- •Хеширование данных
- •Hash-таблицы
- •Hash-таблицы
- •Хеширование применяется для сравнения данных:
- •Hash-функции
- •С точки зрения практического применения, хорошей является такая хэш-функция,
- •Хеширование данных
- •Hash Functions
- •Оценка качества хеш-функции
- •Hash Tables
- •Хеширование данных
- •Обработка коллизий
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Open Addressing (Linear Probing)
- •Подходы к апробированию
- •Linear Probing
- •Линейное апробование
- •Разрешение коллизий: линейное опробование
- •Поиск, Linear Probing
- •Квадратичное апробование
- •Разрешение коллизий: квадратичное опробование
- •Двойное хэширование
- •Разрешение коллизий: двойное хеширование
- •Обработка Коллизий
- •Метод цепочек
- •Метод цепочек
- •Метод цепочек
- •Метод цепочек
- •Метод цепочек
- •Метод цепочек
- •Метод цепочек
- •Chaining
- •Обработка коллизий
- •При любом методе разрешения коллизий необходимо ограничить длину поиска элемента!!!!!!!!.
- •//функция создания хеш-таблицы: //метод деления по модулю (самый
- •Метод функции середины квадрата
- •Преимущества и недостатки хеш-таблиц
Hash-функции
Что делает hash-функцию хорошей? Скорость
Более быстрый чем бинарный поиск
Взаимосвязанность
Если у нас есть ключ K, тогда hash(K) всегда будет Возвращать одинаковый результат
Равномерное распределение
hash –функция должна равномерно распределять ключи Через все возможные индексы в массиве
Сделать хорошую хеш-функцию тяжело
С точки зрения практического применения, хорошей является такая хэш-функция,
которая удовлетворяет следующим условиям:
функция должна быть простой с
вычислительной точки зрения;
функция не должна отображать какую-
либо связь между значениями ключей в связь между значениями адресов;
функция должна минимизировать число
коллизий,то есть ситуаций, когда
разным ключам соответствует одно значение хэш-функции (ключи в этом
случае называются синонимами).
Хеширование данных
•Идеальной хеш-функцией является такая hash-функция, которая для любых двух неодинаковых ключей дает неодинаковые адреса.
Hash Functions
•A collision occurs when h(x) maps two keys to the same location.
|
|
U |
0 |
|
|
|
|
|
|
|
|
(universe of keys) |
|
|
|
||
k1 |
|
|
collision |
|
|
|
|
|
|
|
|
K |
k4 |
k5 |
|
|
|
|
|
|
|
||
(actual |
|
h(kh(k) )= h(k |
) |
||
|
|
||||
keys) |
|
|
2 2 |
5 |
|
|
|
|
|
|
|
|
k2 |
k3 |
h(k3) |
|
|
|
|
|
|
||
|
|
|
p - 1 |
|
|
Оценка качества хеш-функции
Hash Tables
Проблемы хеширования
Хэш-таблицы не выдерживают порядка их внутренних элементов
Создать идеальную хэш-функцию практически невозможно
Collisions
Когда два различных ключа генерируют одинаковое значение хэш- это называется коллизия
hash(K1) == hash(K2)
Хеширование данных
Обработка коллизий
Метод Открытой Адресации
Если мы попытаемся вставить новый элемент и есть коллизия, будем перебирать хэш-таблицу,
пока не найдем свободное место
Реализация:
Если возникает коллизия, вычисляется следующий индекс в массиве, который также проверяется (на основе Первоначального Хзш-результата)
Все данные хранятся непосредственно в хэш-таблице. Дополнительные структуры данных не нужны.
Open Addressing (Linear Probing)
Start with an empty Hash Table
Data
0
1
2
3
4
Open Addressing (Linear Probing)
Insert "John Doe" with ID = 123
Student
Name John Doe
GPA 2.8
ID 123
Data
0
4
1
2
3