Содержание
- 2. Ключевые термины Хеширование – это специальный метод адресации данных для быстрого поиска нужной информации по ключам.
- 3. Ключевые термины Повторное хеширование – это поиск местоположения для очередного элемента таблицы с учетом шага перемещения.
- 4. 4
- 5. Функция, отображающая ключи элементов данных во множество целых чисел (индексы в таблице – хеш-таблица), называется функцией
- 6. Метод деления Исходными данными являются – некоторый целый ключ key и размер таблицы m. Результатом данной
- 7. Для m = 100 хеш-функция возвращает две младшие цифры ключа. 7
- 8. Аддитивный метод в котором ключом является символьная строка. В хеш-функции строка преобразуется в целое суммированием всех
- 9. Данный метод можно несколько модифицировать, получая результат, суммируя только первый и последний символы строки-ключа. int h(char
- 10. Метод середины квадрата в котором ключ возводится в квадрат (умножается сам на себя) и в качестве
- 11. Мультипликативный метод В мультипликативном методе дополнительно используется случайное действительное число r из интервала [0,1), тогда дробная
- 12. Две классические схемы – хеширование методом цепочек (со списками), или так называемое многомерное хеширование – chaining
- 13. Пример реализации метода цепочек при разрешении коллизий: на ключ 002 претендуют два значения, которые организуются в
- 14. В итоге имеем таблицу массива связных списков 14
- 15. При решении задач на практике необходимо подобрать хеш-функцию i = h(key), которая по возможности равномерно отображает
- 16. Пример реализации метода прямой адресации Исходными данными являются 7 записей (для простоты информационная часть состоит из
- 17. На основании исходных данных последовательно заполняем хеш-таблицу. Хеширование первых пяти ключей дает различные индексы (хеш-адреса): i
- 18. Реализация метода цепочек для предыдущего примера Объявляем структурный тип для элемента однонаправленного списка: struct zap {
- 19. Хеширование первых пяти ключей, как и в предыдущем случае, дает различные индексы (хеш-адреса): 9, 0, 6,
- 20. Хеш-таблица 20
- 21. Идеальной хеш-функцией является такая hash-функция, которая для любых двух неодинаковых ключей дает неодинаковые адреса. 21
- 22. Рассмотрим пример реализации несовершенной хеш-функции на языке TurboPascal. function hash (key : string[4]): integer; var f:
- 23. Разновидности методов разрешение коллизий 23
- 24. Разрешение коллизий при добавлении элементов методом цепочек 24
- 25. Разрешение коллизий при добавлении элементов методами открытой адресации В отличие от хэширования с цепочками, при открытой
- 26. 26
- 27. Линейное опробование сводится к последовательному перебору элементов таблицы с некоторым фиксированным шагом a=h(key) + c*i ,
- 28. Еще одна разновидность метода открытой адресации, которая называется двойным хешированием, основана на нелинейной адресации, достигаемой за
- 29. Вставка i = 0 a = h(key) + i*c Если t(a) = свободно или t(a) =
- 30. Циклический переход к началу таблицы 30
- 31. Рассмотрим данный способ на примере метода линейного опробования. При вычислении адреса очередного элемента можно ограничить адрес,
- 32. Вставка i = 0 a = ((h(key) + c*i) div n + (h(key) + c*i) mod
- 33. Алгоритм вставки Вставка i = 0 a = ((h(key) + c*i) div n + (h(key) +
- 34. Удаление i = 0 a = ((h(key) + c*i) div n + (h(key) + c*i) mod
- 35. Распределение коллизий в адресном пространстве таблицы 35
- 36. Пример генерации ключа из десяти латинских букв, первая из которых является большой, а остальные малыми. Пример
- 37. Генерация ключа из m символов c кодами в диапазоне от n1 до n4 (диапазон имеет разрыв
- 38. Пример: длина ключа 7 символов 3 большие латинские (коды 65-90) 2 цифры (коды 48-57) 2 малые
- 39. Известные Хэш-функции 1. CRC16, CRC32, CRC64 - эти Хэш-функции очень просты и применяются только для проверки
- 41. Скачать презентацию