Initial commit

This commit is contained in:
user
2026-07-12 14:22:00 +04:00
commit 49ecd4784c
90 changed files with 6910 additions and 0 deletions
+139
View File
@@ -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>&Theta;(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>.
Точнее говоря, требования к памяти могут быть снижены
до&nbsp;<i>&Theta;(/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. Таким образом, время поиска в наихудшем случае равно&nbsp;<i
style="text-align: justify"
>&Theta;(n)</i
>
плюс время вычисления хеш-функции, что ничуть не лучше, чем в случае
использования связного списка для хранения всех n элементов. Понятно, что
использование хеш-таблиц в наихудшем случае совершенно бессмысленно.
</p>
<h3>Теорема 8.1<sup>2</sup></h3>
<p>
В хеш-таблице с разрешением коллизий методом цепочек время неудачного
поиска в среднем случае в предположении простого равномерного хеширования
составляет&nbsp;<i style="text-align: justify">&Theta;(1 + a).</i>
</p>
<h3>Теорема 8.2</h3>
<p>
В хеш-таблице с разрешением коллизий методом цепочек время успешного
поиска в среднем случае в предположении простого равномерного хеширования
в среднем равно&nbsp;<i style="text-align: justify">&Theta;(1 + a).</i>
</p>
<p style="text-align: justify">
Если количество ячеек в хеш-таблице как минимум пропорционально количеству
элементов, хранящихся в ней, то <i>n = O(m)</i> и, следовательно,
коэффициент заполнения равен <i>n/m = O(m)/m = O(1).</i>&nbsp;Таким
образом, поиск элемента в хеш-таблице в среднем требует постоянного
времени. Поскольку в худшем случае вставка элемента в хеш-таблицу занимает
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 &lt; 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 &lt; 1</i>, в
предположении равномерного хеширования и равновероятного поиска любого из
ключей не превышает
</p>
<div style="text-align: center">
<img src="8.1.png" width="150" />
</div>
<p>&nbsp;</p>
<hr />
<p>
<sup>1</sup>В данном контексте автор, упоминая таблицу с прямой
адресацией, не применяет термин хеш, так как, предположительно, в примере
оригинальной книги не используется хеш-функция для операций поиска
элемента или все операции вставки элемента являются инъективными и не
нуждаются в решении проблем коллизий.
</p>
<p>
<sup>2</sup>Все доказательства теорем представлены в книге автора с целью
описания минимума методического материала
</p>
</body>
</html>