Initial commit
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Страница 8</title>
|
||||
</head>
|
||||
<body>
|
||||
<p style="text-align: center">
|
||||
<i><b>Страница 8</b></i>
|
||||
</p>
|
||||
<hr />
|
||||
<h1 style="text-align: center">Анализ хеш-таблиц и алгоритмов поиска</h1>
|
||||
<h2 style="text-align: center">Общее описание [2, c. 285-318]</h2>
|
||||
<p style="text-align: justify">
|
||||
Хеш-таблица представляет собой эффективную структуру данных для реализации
|
||||
словарей. Хотя на поиск элемента в хеш-таблице может в наихудшем случае
|
||||
потребоваться столько же времени, сколько на поиск в связанном списке, а
|
||||
именно - <i>Θ(n)</i>, на практике хеширование исключительно
|
||||
эффективно. При вполне обоснованных допущениях среднее время поиска
|
||||
элемента в хеш-таблице составляет <i>O(1)</i>.
|
||||
</p>
|
||||
<h2 style="text-align: center">
|
||||
Таблица с прямой адресацией, как хеш-таблица
|
||||
</h2>
|
||||
<p style="text-align: justify">
|
||||
Хеш-таблица обобщает обычный массив. Возможность прямой индексации
|
||||
элементов обычного массива обеспечивает доступ к произвольной позиции в
|
||||
массиве за время <i>O(1)</i>. Хеширование представляет собой исключительно
|
||||
эффективную и практичную технологию: в среднем все базовые словарные
|
||||
операции выполняются за время <i>O(1)</i><i>.</i>
|
||||
</p>
|
||||
<p style="text-align: justify">
|
||||
Недостаток прямой адресации очевиден: если совокупность ключей
|
||||
<i>U</i> велика, хранение таблицы <i>T</i> размером
|
||||
<i>|U|</i> непрактично, а то и вовсе невозможно - в зависимости от
|
||||
количества доступной памяти и размера совокупности ключей. Кроме того,
|
||||
множество <i>K</i> реально сохранённых ключей может быть мало по сравнению
|
||||
с совокупностью ключей <i>U</i>, а в этом случае память, выделенная для
|
||||
таблицы <i>T</i>, в основном расходуется напрасно.
|
||||
</p>
|
||||
<p style="text-align: justify">
|
||||
Когда множество <i>K</i> хранящихся в словаре ключей гораздо меньше
|
||||
совокупности возможных ключей <i>U</i>, для хеш-таблицы требуется
|
||||
существенно меньше места, чем для таблицы с прямой адресацией<sup>1</sup>.
|
||||
Точнее говоря, требования к памяти могут быть снижены
|
||||
до <i>Θ(/K/)</i>, при этом время поиска элемента в хеш-таблице
|
||||
останется равным <i>O(1)</i>. Нужно только заметить, что это граница
|
||||
времени поиска в среднем случае, в то время как в случае таблицы с прямой
|
||||
адресацией эта граница справедлива для наихудшего случая.
|
||||
</p>
|
||||
<h2 style="text-align: center">Хеш-таблица с прямым связыванием</h2>
|
||||
<p>
|
||||
Время, необходимое для вставки в наихудшем случае, равно <i>O(1)</i>.
|
||||
Процедура вставки выполняется очень быстро, в частности, потому, что
|
||||
предполагается, что вставляемый элемент отсутствует в таблице. Время
|
||||
работы поиска в наихудшем случае пропорционально длине списка. Удаление
|
||||
элемента может быть выполнено за время <i>O(1)</i> при использовании
|
||||
дважды связанных списков.
|
||||
</p>
|
||||
<p>
|
||||
Пусть у нас есть хеш-таблица T с m ячейками, в которых хранятся n
|
||||
элементов. В наихудшем случае хеширование с цепочками ведёт себя крайне
|
||||
неприятно: все n ключей хешированы в одну и ту же ячейку, создав список
|
||||
длиной n. Таким образом, время поиска в наихудшем случае равно <i
|
||||
style="text-align: justify"
|
||||
>Θ(n)</i
|
||||
>
|
||||
плюс время вычисления хеш-функции, что ничуть не лучше, чем в случае
|
||||
использования связного списка для хранения всех n элементов. Понятно, что
|
||||
использование хеш-таблиц в наихудшем случае совершенно бессмысленно.
|
||||
</p>
|
||||
<h3>Теорема 8.1<sup>2</sup></h3>
|
||||
<p>
|
||||
В хеш-таблице с разрешением коллизий методом цепочек время неудачного
|
||||
поиска в среднем случае в предположении простого равномерного хеширования
|
||||
составляет <i style="text-align: justify">Θ(1 + a).</i>
|
||||
</p>
|
||||
<h3>Теорема 8.2</h3>
|
||||
<p>
|
||||
В хеш-таблице с разрешением коллизий методом цепочек время успешного
|
||||
поиска в среднем случае в предположении простого равномерного хеширования
|
||||
в среднем равно <i style="text-align: justify">Θ(1 + a).</i>
|
||||
</p>
|
||||
<p style="text-align: justify">
|
||||
Если количество ячеек в хеш-таблице как минимум пропорционально количеству
|
||||
элементов, хранящихся в ней, то <i>n = O(m)</i> и, следовательно,
|
||||
коэффициент заполнения равен <i>n/m = O(m)/m = O(1).</i> Таким
|
||||
образом, поиск элемента в хеш-таблице в среднем требует постоянного
|
||||
времени. Поскольку в худшем случае вставка элемента в хеш-таблицу занимает
|
||||
O(1) времени (как и удаление элемента при использовании дважды связанных
|
||||
списков), можно сделать вывод, что все словарные операции в хеш-таблице в
|
||||
среднем выполняются за время O(1).
|
||||
</p>
|
||||
<h2 style="text-align: center">Хеш-таблица с открытой адресацией</h2>
|
||||
<p style="text-align: justify">
|
||||
Мы проанализируем математическое ожидание количества исследований для
|
||||
хеширования с открытой адресацией в предположении равномерного хеширования
|
||||
и начнём с анализа количества исследований в случае неудачного поиска.
|
||||
</p>
|
||||
<h3>Теорема 8.3</h3>
|
||||
<p>
|
||||
Математическое ожидание количества исследований при неудачном поиске в хеш
|
||||
таблице с открытой адресацией и коэффициентом заполнения
|
||||
<i>a = n/m < 1</i> в предположении равномерного хеширования не
|
||||
превышает <i>1/(1-a).</i>
|
||||
</p>
|
||||
<h3>Следствие 8.1</h3>
|
||||
<p>
|
||||
Вставка элемента в хеш-таблицу с открытой адресацией и коэффициентом
|
||||
заполнения a в предположении равномерного хеширования требует в среднем не
|
||||
более <i>1/(1-a)</i> исследований.
|
||||
</p>
|
||||
<h3>Теорема 8.4</h3>
|
||||
<p>
|
||||
Математическое ожидание количества исследований при удачном поиске в
|
||||
хеш-таблице с открытой адресацией и коэффициентом заполнения <i>a < 1</i>, в
|
||||
предположении равномерного хеширования и равновероятного поиска любого из
|
||||
ключей не превышает
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<img src="8.1.png" width="150" />
|
||||
</div>
|
||||
<p> </p>
|
||||
<hr />
|
||||
<p>
|
||||
<sup>1</sup>В данном контексте автор, упоминая таблицу с прямой
|
||||
адресацией, не применяет термин хеш, так как, предположительно, в примере
|
||||
оригинальной книги не используется хеш-функция для операций поиска
|
||||
элемента или все операции вставки элемента являются инъективными и не
|
||||
нуждаются в решении проблем коллизий.
|
||||
</p>
|
||||
<p>
|
||||
<sup>2</sup>Все доказательства теорем представлены в книге автора с целью
|
||||
описания минимума методического материала
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user