Главная » Просмотр файлов » В.А. Антонюк, А.П. Иванов - Программирование и информатика (Краткий конспект лекций)

В.А. Антонюк, А.П. Иванов - Программирование и информатика (Краткий конспект лекций) (1109543), страница 13

Файл №1109543 В.А. Антонюк, А.П. Иванов - Программирование и информатика (Краткий конспект лекций) (В.А. Антонюк, А.П. Иванов - Программирование и информатика (Краткий конспект лекций)) 13 страницаВ.А. Антонюк, А.П. Иванов - Программирование и информатика (Краткий конспект лекций) (1109543) страница 132019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 13)

Понятно, что такая операция будет линейной относительноразмера хэш-таблицы, но зато есть надежда, что при тактике удвоения размера применятьрехэширование нужно будет достаточно редко.Если задача заключается в том, чтобы заранее скомпилировать хэш-таблицу из некоторого множества известных ключей, а потом только пользоваться ею для поиска ключей(отвечать на вопрос – «есть ключ в контейнере или нет?», либо искать связанное с ключомзначение в ассоциативном контейнере), то можно построить более компактный по памятиалгоритм разрешения коллизий – метод открытой адресации:H(K1)I1H(K2)I1K7K1H(K3)I1K2K3H(K6)I6H(K7)I6K6Рис.

27: Разрешение коллизий методом линейных проб при открытой адресации59Попав в какую-либо ячейку хэш-таблицы сравниваем хранящийся там ключ с искомым,и, если они не совпадают – переходим к следующей по порядку ячейке таблицы. Если онапустая – то сохраним в эту ячейку текущий ключ, если заполнена – опять сравниваемискомый ключ с ранее сохранённым. При необходимости – опять перейдем к следующейячейке, а если мы находимся в конце массива – перепрыгнем в его начало. Рано или поздномы найдём свободную ячейку, на которой поиск завершится, либо вернемся в самую первуюпроверенную ячейку, что будет означать, что наша таблица переполнилась и ничего большев неё сохранить нельзя.Математически этот алгоритм можно выразить как последовательный перебор разныххэш-функций, одна из которых рано или поздно приведёт нас к успеху:0 () = %, 1 () = ( + 1)%, 2 () = ( + 2)%, . .

. , () = ( + )%Обратите внимание, что этот набор функций линеен по , поэтому его и называют методомлинейных проб при открытой адресации. Можно применить и более сложные хэш-функции,например, метод квадратичных проб: () = ( + 2 )%Но обычно и метод линейных проб дает вполне приемлемые результаты.Понятно, что в любом методе открытой адресации некоторые коллизии будут зависеть отпорядка, в котором мы хэшируем ключи: при одном порядке данный ключ будет порождать коллизию, а при другом – не будет.

Но среднее количество коллизий все равно будетзависеть от коэффициента заполнения таблицы образом, подобным приведённому в таблице выше, а поэтому это не будет приносить никаких неприятностей для операций поиска ивставки.Но, в отличие от таблиц с разрешением коллизий методом цепочек, удалять ключи изтакой таблицы будет нельзя: удалив какое-то значение мы можем прервать непрерывнуюпоследовательность ячеек, в которую сохраняли коллизии, поэтому последующие ключипросто не найдутся, если что-то из таблицы удалить.В завершение вернёмся к вопросу выбора хэш-функции для нецелочисленных, и, возможно,вообще для нечисловых ключей.

Рассмотрим эту задачу на примере хэширования строк,так как объекты любой природы можно свести к строкам различной длины, просто преобразовав их к шестнадцатиричному виду байт, хранимых в оперативной памяти для данногообъекта, или перекодировав эти байты в строки другим, более экономным способом.Нам нужно сделать два шага: первым действием надо преобразовать строку в целое число,а вторым шагом – отобразить его в хэш-таблицу уже известным из предыдущей частилекции образом.

Первое, что приходит в голову для преобразования строки в число – этопросто просуммировать все байты этой строки, ведь каждый байт – это просто число отнуля до 255. Однако, такая хэш-функция будет неоптимальной по количеству коллизий:она будет давать совершенно одинаковые значения для строк, различающихся порядкомследования одних и тех же букв.Приведем пример неплохой хэш-функции для строк, которая реализована в одной из известных библиотек языка Си++:unsigned hashkey( const char* str ){unsigned hash = 0;while (*str) hash = (hash << 5) + hash + *str++;return hash;}60Здесь операция << 5 означает «битовый сдвиг левого операнда влево на 5 позиций» (илиже – что то же самое – «целочисленное умножение на 32»).Приведённая хэш-функция будет зависеть не только от букв строки, но и от порядка ихследования.

И не забудьте потом сделать второй шаг – взять остаток от деления возвращённого этой функцией числа на размер хэш-таблицы.Изобретение эффективных по коллизиям хэш-функций – увлекательное занятие, важно лишь вовремя остановиться: если количество коллизий для простой хэш-функции васустраивает, то незачем искать более совершенную хэш-функцию. Сэкономленное время работы программы не будет окупать затраты времени на изобретение новой хэш-функции иеё программирование.61Литература[1] Н.

Н. КалиткинЧисленные методы[2] R. S. Boyer, J. S. Moore762—772.// М., Наука, 1978.A fast string searching algorithm[3] M. Matsumoto, T. NishimuraMersenneuniform pseudorandom number generator.Simulations – 1998 –8 (1), 3-30.twister:A623-dimensionally20,equidistributed// ACM Trans. on Modeling and Computer[4] Г. М. Адельсон-Вельский, Е. М.

Ландис Один алгоритмДоклады АН СССР – 1962 – Т.146, № 2. – С. 263—266.[5] R. Bayer, E. McCreight OrganizationInformatica – 1972 – 1 (3), 173–189.// Comm. ACM – 1977 –организации информацииand Maintenance of Large Ordered Indexes//// ActaСписок иллюстраций123456789101112131415161718192021222324252627Метод дихотомии . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Метод хорд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Метод касательных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .«Плохой» выбор начального приближения . . . . . . . . . . . . . . . . . . . .Метод итераций: разные типы сходимости к корню уравнения . . . . . . . .Mersenne Twister: изменение состояния .

. . . . . . . . . . . . . . . . . . . . .Пример интерполяции многочленом, проходящим через три заданные точкиВставка элемента . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Вставка-удаление в конце . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .Хранение элементов в деке . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Хранение элементов в деке . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Хранение элементов в списке . . . . . . . . . . . . . . . . . . . . . . .

. . . . .Вставка в список . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Вставка в список перед нужным элементом . . . . . . . . . . . . . . . . . . .Удаление из списка элемента, следующего за указанным . . . .

. . . . . . . .Удаление из списка указанного элемента . . . . . . . . . . . . . . . . . . . . .Двусвязный список . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Двоичное дерево поиска . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .Удаление внутреннего узла . . . . . . . . . . . . . . . . . . . . . . . . . . . . .АВЛ-балансировка первого типа . . . . . . . . . . . . . . . . . . . . . . . . . .АВЛ-балансировка второго типа . . . . . . . . . . . . . . . . . .

. . . . . . . .Страничная организация двоичного дерева . . . . . . . . . . . . . . . . . . .Страничная организация двоичного дерева . . . . . . . . . . . . . . . . . . .Вставка в B-дерево . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + -дерево . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Коллизии в хэш-таблице и их разрешение методом цепочек . . . . . . . . . .Разрешение коллизий методом линейных проб при открытой адресации . . .63101112121329364344444546464647474748495051535455565859.

Характеристики

Тип файла
PDF-файл
Размер
5,18 Mb
Тип материала
Высшее учебное заведение

Список файлов лекций

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