Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
8.5 ХЕШИРОВАНИЕМы завершим эту главу приложением теории вероятностей к программированию. Ряд важных алгоритмов хранения и выборки информации в ЭВМ основаны на методе, который называется „хеширование". Общая задача заключается в хранении некоторого множества записей, каждая из которых содержит значение „ключа" и некоторые данные Реально используемые компьютеры не настолько вместительны, чтобы можно было выделить по отдельной ячейке для каждого возможного ключа; всего возможны миллиарды ключей, но в каждом конкретном приложении их присутствует не так уж много. Одно из решений состоит в том, чтобы хранить две таблицы, 51 Установить 52 Если 53 Если 54 Увеличить В случае успешного поиска нужное значение данных
в предположении, что таблица еще не заполнена до предела. Этот метод работает правильно, но его работа может быть ужасающе медленной; при безуспешном поиске шаг Хеширование было придумано как раз для того, чтобы ускорить поиск. Основная идея, в одном из популярных вариантов, состоит в использовании
Как и ранее, имеется переменная Пусть, например, ключами являются имена и имеются
Поначалу имеем четыре пустых списка и
(Значения
В массиве Ниже приведено точное описание алгоритма, который ищет ключ К в соответствие с этой схемой:
Например, при поиске имени После успешного поиска искомые данные
Теперь таблица вновь отвечает имеющимся данным. Мы надеемся, что все списки будут иметь примерно одинаковую длину, поскольку в этом случае задача поиска будет решаться примерно в Мы заранее не знаем, какие ключи будут в таблице, но обычно возможно так выбрать хеш-функцию Н, чтобы значения Анализ хеширования: введение „Анализ алгоритмов" — это раздел информатики, занимающийся выводом количественной информации об эффективности компьютерных методов. „Вероятностный анализ алгоритмов" — это изучение времени работы алгоритмов, рассматриваемого как случайная величина, зависящая от предполагаемых характеристик исходных данных. Хеширование особенно подходит для вероятностного анализа, поскольку метод хеширования исключительно эффективен в среднем, хотя его наихудший случай просто ужасен. (Наихудший случай здесь — когда все ключи имеют одинаковый хеш-код.) Так что программисту, использующему хеширование, лучше всего поверить в теорию вероятностей. Обозначим через Р количество выполнений шага
Таким образом, главная характеристика, определяющая время работы процедуры поиска, есть число проб Р. Чтобы представить себе работу алгоритма, можем вообразить, что у нас есть адресная книга, организованная неким специальным образом — на каждой странице размещается только одна запись. На обложке книги мы находим номер страницы первой записи в каждом из Если в таблицу помещено Случай 1: ключ отсутствует Рассмотрим сначала поведение Р в случае безуспешного поиска в предположении, что в таблицу уже было помещено
где Если, например,
Если Безуспешный поиск требует по одной пробе для каждого элемента списка
Вероятность того, что
Может быть, здесь нужно действовать медленнее. Пусть
Тогда
Что же, неплохо. Как мы и ожидали, среднее число проб в
следовательно, ПФСВ для общего числа проб в безуспешном поиске будет
Это биномиальное распределение бросании. Уравнение
Если Случай 2: ключ присутствует Обратимся теперь к успешным поискам. Вероятностное пространство для этого случая несколько сложнее, в соответствии с нашей задачей. Мы выберем в качестве П множество элементарных событий
где Пусть
если си — событие (8.86). (В некоторых приложениях чаще ищутся ключи, вставляемые первыми, или, наоборот, последние ключи, так что мы не будет предполагать, что все Число проб Р в случае успешного поиска равно р, если ключ К является
или, если обозначить через
Пусть, например, мы имеем
Число проб Уравнение (8.89) представляет Р в виде суммы случайных величин, но мы не можем просто вычислить Если А и В — некоторые события в вероятностном пространстве, то будем говорить, что условная вероятность А при условии В есть
Например, если X и Y — случайные величины, то условная вероятность события
Для любого фиксированного у в диапазоне изменения У сумма всех этих условных вероятностей по всем х в диапазоне изменения X составит Если X и Y независимы, то случайная величина Если X принимает только целые неотрицательные значения, то можно разложить ее ПФСВ в сумму условных ПФСВ по отношению к любой другой случайной величине У:
Это соотношение справедливо потому, что коэффициент при
Так, если X есть произведение очков, выпавших на двух правильных кубиках, а У — сумма очков, то ПФСВ
поскольку условные вероятности для
эту формулу достаточно один раз понять, и она станет очевидной. (Конец отвлечения.) Формула (8.92) позволяет выписать ПФСВ для числа проб в успешном поиске, если положить в ней
Следовательно, ПФСВ для самой величины Р может быть записана как
где
есть ПФСВ для вероятностей поиска Очень хорошо. Мы имеем производящую функцию для случайной величины Р; теперь найдем математическое ожидание и дисперсию путем дифференцирования. Вычисления несколько упрощаются, если убрать множитель
Следовательно,
Эти общие формулы выражают математическое ожидание и дисперсию числа проб Р через математическое ожидание и дисперсию заданного распределения искомых ключей Пусть, например,
Вновь мы получили ускорение в желаемой пропорции С другой стороны, мы могли бы принять В обоих случаях проведенный анализ позволяет спать спокойно тем пессимистам среди нас, кто опасается наихудшего случая: из неравенства Чебышёва следует, что списки будут хорошими и короткими, за исключением крайне редких случаев. Случай 2, продолжение: разнообразные дисперсии Мы только что вычислили дисперсию числа проб в случае успешного поиска, рассматривая Р как случайную величину на вероятностном пространстве из
как можно считать, представляет время выполнения успешного поиска. Величина
где с вероятностью
Ожидаемое значение Для иллюстрации этой разницы между дисперсиями выполним вычисления для произвольных
Успешный поиск, в котором любой из
проб. Наша цель — вычислить дисперсию величины Как оказывается, проще вычислить дисперсию несколько иной величины
Имеем
следовательно, математическое ожидание и дисперсия Л удовлетворяют соотношениям
Вероятность того, что размеры списков составят
деленному на
Для неискушенного глаза эта сумма выглядит жутковато, однако наш опыт, приобретенный в гл. 7, позволяет распознать в ней
то мы можем легко убедиться, что
Для проверки подставим Если бы мы нашли значения
Ничего не скажешь, сложные выражения; они, однако, значительно упростятся, если положить
откуда следует, что
Выражение для Формула для
поэтому находим
Теперь можно собрать все вместе и вычислить искомую дисперсию
Встретив такое „совпадение", мы можем заподозрить наличие какой-то математической причины; должен существовать другой способ решения задачи, объясняющий, почему ответ так прост. И действительно, такой способ имеется (в упр. 61), и он показывает, что в общем случае дисперсия среднего успешного поиска имеет вид
где Помимо дисперсии среднего мы можем также рассмотреть среднее дисперсии. Иными словами, каждая последовательность
Успешный поиск в результирующей таблице имеет ПФСВ
Только что мы занимались средним числом проб для успешного поиска в этой таблице, а именно,
Эта дисперсия является случайной величиной, зависящей от Таким образом, имеются три разумных вида дисперсии, которые могут быть полезны при изучении поведения успешного поиска. Это общая дисперсия числа проб, вычисляемая по всем берется по всем к, а затем среднее — по всем наборам
дисперсия среднего — это
и среднее дисперсии — это
Оказывается, что эти три величины связаны между собой простым соотношением:
В самом деле, условные распределения вероятностей всегда удовлетворяют тождеству
Здесь X и Y — случайные величины на произвольном вероятностном пространстве, причем X принимает вещественные значения. (Это тождество доказывается в упр. 22.) Уравнение (8.105) — это частный случай, в котором X — число проб в успешном поиске, Общее уравнение (8.106) требует внимательного рассмотрения, поскольку в нем скрыты несколько различных случайных величин и вероятностных пространств, в которых надлежит вычислять математические ожидания и дисперсии. Случайная величина стоит VX, безусловная дисперсия X. Поскольку дисперсии неотрицательны, мы всегда будем иметь
Вновь случай 1: пересмотр безуспешного поиска В завершение нашего микроскопического изучения хеширования проведем еще одно вычисление, типичное для анализа алгоритмов. На этот раз мы займемся более подробно общим временем работы в случае безуспешного поиска, в предположении, что компьютер вставляет в таблицу дотоле неизвестный ключ. В процессе вставки (8.83) возможны два случая, в зависимости от того, отрицательно ли
где а, (3 и До сих пор мы использовали вероятностные производящие функции только для случайных величин, принимающих целые неотрицательные значения. Оказывается, однако, что с выражением
для произвольной вещественнозначной случайной величины X можно работать ничуть не хуже, поскольку все существенные характеристики X зависят только от поведения
является ПФСВ даже в тех случаях, когда Производящей функцией для
Следовательно, имеем
Подсчет
В гл. 9 мы научимся оценивать подобные величины при больших та и
|
1 |
Оглавление
|