Содержание
- 2. Введение Задача: Реализовать динамическое множество (key-value storage) со стандартными операциями вставки элемента (Insert), удаления элемента (Delete),
- 3. Таблицы с прямой адресацией Пусть требуется реализовать динамическое множество, где каждый элемент имеет ключ из совокупности
- 4. Таблицы с прямой адресацией Пусть требуется реализовать динамическое множество, где каждый элемент имеет ключ из совокупности
- 5. Таблицы с прямой адресацией. Иллюстрация. U – множество всех возможных ключей Введение Таблицы с прямой адресацией
- 6. Таблицы с прямой адресацией. Иллюстрация. K – множество всех реальных ключей (имеются объекты с ключами из
- 7. Таблицы с прямой адресацией. Иллюстрация. T – таблица с прямой адресацией (массив) размера |U| Таблица может
- 8. Таблицы с прямой адресацией. Иллюстрация. Ключи используются для того, чтобы уникально определять каждый объект. Введение Таблицы
- 9. Таблицы с прямой адресацией. Иллюстрация. В i-ой ячейке содержится указатель на элемент с ключом i. Каждый
- 10. Таблицы с прямой адресацией. Операции. Реализация операций тривиальна. Direct-Address-Search(T,k) // T[] – массив, k – ключ
- 11. Таблицы с прямой адресацией. Вариации. Если нет необходимости в дополнительных полях объектов динамического множества, сами элементы
- 12. Таблицы с прямой адресацией. Вариации. В объекте можно не хранить информацию о значении ключа, т.к. индекс
- 13. Таблицы с прямой адресацией. Недостатки. Если совокупность ключей велика, то хранение таблицы T размером |U| непрактично
- 14. Хеш-таблицы Когда используются хеш-таблицы: множество K реально сохраненных ключей мало по сравнению с |U|. Требования к
- 15. Хеш-таблицы. Иллюстрация. Объект с ключом ki сохраняется в таблицу по индексу h(ki). Введение Таблицы с прямой
- 16. Хеш-таблицы. Иллюстрация. Возможна ситуация, когда разным ключам соответствуют одинаковые хеш-значения. Введение Таблицы с прямой адресацией Хеш-таблицы
- 17. Хеш-таблицы. Коллизии. Опр. Коллизией называется ситуация, когда два ключа имеют одно и то же хеш-значение, а
- 18. Хеш-таблицы. Коллизии. Методы разрешения коллизий: Метод разрешения с помощью цепочек Метод открытой адресации Введение Таблицы с
- 19. Особенности использования хэш-функций Найти хэш-функцию, которая минимизирует коллизии Хорошая хэш функция должна использовать всю информацию, которая
- 20. Метод разрешения с помощью цепочек
- 21. Разрешение коллизий с помощью цепочек Суть метода: все элементы, хешированные в одну и ту же ячейку,
- 22. Разрешение коллизий с помощью цепочек. Иллюстрация Каждая ячейка T[j] хеш-таблицы содержит указатель на связный список всех
- 23. Разрешение коллизий с помощью цепочек. Операции Реализация операций работы с таблицей: Суть метода Операции Метод деления
- 24. Разрешение коллизий с помощью цепочек. Операции Реализация операций работы с таблицей: Суть метода Операции Метод деления
- 25. Разрешение коллизий с помощью цепочек. Операции Реализация операций работы с таблицей: Суть метода Операции Метод деления
- 26. Разрешение коллизий с помощью цепочек Пусть n элементов хранятся в хеш-таблице T с m ячейками. Будем
- 27. Разрешение коллизий с помощью цепочек В худшем случае: все n ключей имеют одинаковое хеш-значение и попадают
- 28. Разрешение коллизий с помощью цепочек Обозначим длины списков T[j] для j=0,1,…,m-1 как nj, так что n0
- 29. Разрешение коллизий с помощью цепочек Примечание. Если количество элементов n пропорционально количеству ячеек m в хэш-таблице,
- 30. Разрешение коллизий с помощью цепочек. Важно Для качественной хеш-функции должно выполняться предположение простого равномерного хеширования. Помещаемые
- 31. Разрешение коллизий с помощью цепочек. Строковые ключи Метод преобразования ключей строкового типа в числовой: Пусть есть
- 32. Разрешение коллизий с помощью цепочек. Методы вычисления хеш-значения по ключу: Метод деления Метод умножения Универсальное хеширование
- 33. Хеш-функции. Метод деления. Суть метода: Хеш-значение ключа k определяется как остаток от деления на количество ячеек
- 34. Хеш-функции. Метод умножения. Построение хеш-функции выполняется в 2 этапа: Выбираем константу 0 Полученное в п.1 число
- 35. Хеш-функции. Метод умножения. Рекомендация для технической оптимизации: m перестает быть критичным обычно m выбирается равной степени
- 36. Хеш-функции. Метод умножения. Вычисление функции h(k): Умножаем k на w–битовое целое число s=A*2w Результат умножения –
- 37. Хеш-функции. Метод умножения. Вычисление функции h(k): Умножаем k на w–битовое целое число s=A*2w Результат умножения –
- 38. Хеш-функции. Метод умножения. Вычисление функции h(k): Умножаем k на w–битовое целое число s=A*2w Результат умножения –
- 39. Хеш-функции. Метод умножения. Вычисление функции h(k): Умножаем k на w–битовое целое число s=A*2w Результат умножения –
- 40. Метод умножения. Пример. Кнут в своей книге рекомендует в качестве константы Пример. Пусть k = 123456,
- 41. Хеш-функции. Универсальное хеширование. Предположим есть недоброжелатель, знающий, какая именно хеш-функция используется и умышленно выбирающий ключи так,
- 42. Пример универсального хеширования. Простой пример класса хеш-функций для универсального хеширования: Выберем простое число p достаточно большое,
- 43. Пример универсального хеширования. Получили семейство хеш-функций Hpm={hab: a∈ Zp* и b∈ Zp}. Причем размер m выходного
- 44. Метод открытой адресации
- 45. Хэш-функции. Метод открытой адресации Суть метода: В ячейке хеш-таблицы хранится либо элемент динамического множества, либо NULL
- 46. Метод открытой адресации. Исследование таблицы Поиск элемента в таблице – это исследование ячеек в определенной последовательности.
- 47. Хэш-функции. Метод открытой адресации Последовательность исследований для каждого ключа k есть перестановка на множестве {0,1,…,m-1} .
- 48. Хэш-функции. Метод открытой адресации Последовательность исследований для каждого ключа k есть перестановка на множестве {0,1,…,m-1} .
- 49. Хэш-функции. Метод открытой адресации Последовательность исследований для каждого ключа k есть перестановка на множестве {0,1,…,m-1} .
- 50. Хэш-функции. Метод открытой адресации Последовательность исследований для каждого ключа k есть перестановка на множестве {0,1,…,m-1} .
- 51. Хэш-функции. Метод открытой адресации Реализация функции поиска: Прим. Не забываем предположение о равномерном хешировании: для каждого
- 52. Хэш-функции. Метод открытой адресации Реализация функции поиска: Прим. Не забываем предположение о равномерном хешировании: для каждого
- 53. Метод открытой адресации. Линейное исследование. Используется вспомогательная хэш-функция h`: U → {0,1,…,m-1} Для вычисления последовательности исследований
- 54. Метод открытой адресации. Линейное исследование. Проблема метода: первичная кластеризация. Пример: добавим в хеш-таблицу размера m=10 с
- 55. Метод открытой адресации. Квадратичное исследование. Используется хэш-функция где h` - вспомогательная хэш-функция, c1 и c2 –
- 56. Метод открытой адресации. Двойное хеширование. Используется хеш-функция где h1, h2 - вспомогательные хеш-функции, i = 0,1,…,m-1.
- 58. Скачать презентацию