Лекция 13. Хеш-таблицы (Электронные лекции)

PDF-файл Лекция 13. Хеш-таблицы (Электронные лекции) Алгоритмы и алгоритмические языки (36188): Лекции - 1 семестрЛекция 13. Хеш-таблицы (Электронные лекции) - PDF (36188) - СтудИзба2019-04-24СтудИзба

Описание файла

Файл "Лекция 13. Хеш-таблицы" внутри архива находится в папке "Электронные лекции". PDF-файл из архива "Электронные лекции", который расположен в категории "". Всё это находится в предмете "алгоритмы и алгоритмические языки" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Лекции по курсу “Алгоритмы и алгоритмические языки”, 1 курс, 1 поток, 2010/2011 уч.годЛекция 13 Хеш-таблицы13.1. Словарные операции: добавление, поиск и удаление элементов по их ключам. Организуетсятаблица ключей: массив Index[m] длины m, элементы которого содержат значение ключа иуказатель на данные (информацию), соответствующие этому ключу.13.1.1. Прямая адресация. Применяется, когда количество возможных ключей невелико:например, ключи перенумерованы целыми числами из множества U = {0, 1, 2, …, m– 1}, где m не очень большое целое число.

В случае прямой адресации ключ сномером k соответствует элементу Index[k]. Нередко в качестве ключаиспользуется индекс (номер элемента) массива Index, а значениями элементовмассива Index являются указатели на соответствующие данные, либо нулевойуказатель null.Для реализации прямой адресации необходимо запрограммировать три словарныеоперации: поиск (Search(key)), добавление данных (Insert(key, value)) и исключениеданных (Delete(key, value)).

Ясно, что выполнение каждой из трех словарныхопераций требует время порядка O(1) (т.е. какое-то фиксированное время):Search(key) – это обращение к элементу Index[key], Insert(key, value) сводится коперации присваивания Index[key] = &value, а Delete(key, value) – к операцииприсваивания Index[key] = null.13.1.2. Определение. f(n) = O(g(n)) означает, что с ростом n (при n → ∞) отношение f(n)/g(n)f ( n)= 0 , то f(n) = o(g(n)).остается ограниченным. Если же limn→ ∞ g ( n )f(n) = O(1) означает, что f(n) является ограниченной функцией для всех n, т.е. длявсех n | f(n)| ≤ C, это C можно использовать в качестве значения f(n).13.1.3. Основной недостаток прямой адресации – таблица Index занимает слишком многоместа, если множество всевозможных ключей U достаточно велико (m большоецелое число).

Тем более что обычно число используемых ключей << числавсевозможных ключей, так что большая часть памяти расходуется зря.13.2. Хеширование тоже позволяет обеспечить среднее время операций с данными Tср(n) = O(1) итоже за счет использования таблицы Index. Однако в этом случае таблица содержит места недля всех возможных ключей. Будет показано, что хеш-таблица использует намного меньшуюпамять, чем |U| (мощность множества всех ключей). Она использует память объемом Θ(|K|),где |K| – мощность множества использованных ключей (правда это оценка в среднем, а не вхудшем случае, да и то при определенных предположениях). Пример использованияхеширования – таблица идентификаторов программы, составляемая компилятором (при еесоставлении ключами являются идентификаторы).13.2.1.

При прямой адресации элементу с ключом key отводится строка таблицы с номеромkey, в случае хеш-адресации элементу с ключом key отводится строка таблицы сномером hash(key), где hash: U → {0, 1, 2, …, m – 1} – хеш-функция. Число hash(key)называется хеш-значением ключа key.13.2.2.

Если хеш-значения ключей key1 и key2 совпадают (hash(key1) == hash(key2)), говорят,что случилась коллизия. Конечно, хотелось бы выбрать хеш-функцию, для которойколлизии исключены, но это возможно лишь тогда, когда все возможные значенияключей заранее известны. В общем же случае коллизии неизбежны, так как |U| > m.(с) Кафедра системного программирования ф-та ВМК МГУ, 20101Лекции по курсу “Алгоритмы и алгоритмические языки”, 1 курс, 1 поток, 2010/2011 уч.год13.2.3. Простейший способ обработки коллизий – сцепление элементов с одинаковымизначениями хеш-функции: все такие элементы сцепляются в список, а в хеш-таблицупомещается указатель на первый элемент этого списка.

В пределах каждого такогосписка осуществляется последовательный поиск. Будет показано, что в случаеиспользования двустороннего списка, среднее время выполнения каждой из трехсловарных операций – поиска (Chained-Hash-Search(key)), добавления данных(Chained-Hash-Insert(key, value)) и исключения данных (Chained-Hash-Delete(key,value)) – будет иметь порядок O(1). Основная трудность – в поиске по списку, ноколлизий не очень много и hash(key) можно выбрать так, чтобы списки былидостаточно короткими.13.2.4. Примером хеш-таблицы с цепочками является записная книжка с алфавитом.

Хештаблица с цепочками успешно применяется в компиляторах при формированиитаблицы имен.13.3. Устройство простой хеш-таблицы (реализация хеширования с цепочками).13.3.1. Задается некоторое фиксированное число m (Типичные значения m от 100 до1,000,000).13.3.2. Создается массив Index[m] указателей начал двунаправленных списков (цепочек),который называется индексом хеш-таблицы. В начале работы все указатели имеютзначения null.13.3.3.

Задается хеш-функция hash(), которая получает на вход ключи и выдает значение от0 до m – 1.13.3.4. При добавлении пары (key, value) (Insert(key, value)) вычисляется h = hash(key) и парадобавляется в список *Index[h]: выполняется поиск по этому списку и если в немимеется пара с ключом key, значение заменяется на value; если пары с ключом key всписке нет, то пара (key, value) добавляется в конец списка.13.3.5. При удалении, либо поиске пары (key, value) (Delete(key, value), либо Search(key))вычисляется h = hash(key) и происходит удаление, либо поиск пары (key, value) всписке *Index[h].13.4.

Анализ хеширования с цепочками.13.4.1. Пусть Index[m] – хеш-таблица с m позициями, в которую занесено n пар (key,value). Отношение α = n/m называется коэффициентом заполнения хеш-таблицы.13.4.1.1. Коэффициент заполнения α позволяет судить о качестве хеш-функции:пусть M =1 m∑ | *Index[i] | – средняя длина списков; если hash(key)m i= 01 m− 1( M − | *Index[i] |) 2 ≤ α.∑m i= 013.4.1.2.

В частности, условие (13.4.1.1) исключает наихудший случай, когда хешзначения всех ключей одинаковы, заполнен только один список и поиск вэтом списке из n элементов имеет среднее время Θ(n). Ясно, что такоехеширование бессмысленно.13.4.1.3. Равномерное хеширование: хеш-функция подобрана таким образом, чтокаждый данный элемент может попасть в любую из m позиций хеш-таблицыс равной вероятностью, независимо от того, куда попали другие элементы.13.4.1.4. В случае равномерного хеширования условие (13.4.1.1) выполняется исредняя длина каждого из m списков хеш-таблицы с коэффициентомзаполнения α равна α.– «хорошая» хеш-функция, то дисперсия D =(с) Кафедра системного программирования ф-та ВМК МГУ, 20102Лекции по курсу “Алгоритмы и алгоритмические языки”, 1 курс, 1 поток, 2010/2011 уч.год13.4.1.5.

В случае равномерного хеширования среднее время поиска элемента,отсутствующего в таблице, пропорционально средней длине списка α, таккак поиск сводится к просмотру одного из списков, среднее времяпросмотра которого равно α.13.4.1.6. Поскольку среднее время вычисления хеш-функции равно Θ(1), то среднеевремя выполнения каждой из словарных операций с учетом вычисленияхеш-функции равно Θ(1 + α).Таким образом, доказана следующаяТеорема.

Пусть T – хеш-таблица с цепочками, имеющая коэффициент заполненияα, причем хеширование равномерно. Тогда при поиске элемента, отсутствующего втаблице, будет просмотрено в среднем α элементов таблицы, а, включая время навычисление хеш-функции, будет равно Θ(1 + α).13.4.2. Теорема. При равномерном хешировании среднее время успешного поиска в хештаблице с коэффициентом заполнения α есть Θ(1 + α).13.4.2.1. Замечание.

Теорема не сводится к предыдущей, так как в предыдущейтеореме оценивалось среднее число действий, необходимых для поискаслучайного элемента, равновероятно попадающего в любую из ячеектаблицы. В этой теореме сначала рассматривается случайно выбраннаяпоследовательность элементов, добавляемых в таблицу (на каждом шаге всезначения ключа равновероятны и шаги независимы); потом в полученнойтаблице выбираем элемент для поиска, считая, что все ее элементыравновероятны.13.4.2.2. Доказательство несложное, но требует знания основ теории вероятностей(это видно и из п°. 13.4.2.1).13.4.3. Из теорем 13.4.1 и 13.4.2.

следует, что в случае равномерного хеширования среднеевремя выполнения любой словарной операции есть O(1), т.е. оценивается некоторымпостоянным (своим для каждой операции) значением.13.5. Методы построения хеш-функций.13.5.1. Общие требования13.5.2. Построение хеш-функции методом деления с остатком. Хеш-функция hash(key)определяется соотношениемhash(key) = key % m.При правильном выборе m такая хеш-функция обеспечивает распределение, близкоек равномерному.Правильный выбор m: в качестве m выбирается достаточно большое простое число,далеко отстоящее от степеней двойки.

Например, если устраивает средняя длинасписков 3, а число записей, доступ к которым нужно обеспечить с помощью хештаблицы ≈ 2000, то можно взять m = 2000/3 ≈ 701. Тогда hash(key) = key % 701.Недостаток: в качестве m нельзя брать степень двойки, так как если m = 2p, тоhash(key) – это просто p младших битов числа key.13.5.3. Построение хеш-функции методом умножения.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее