Files

57 lines
3.9 KiB
HTML
Raw Permalink Normal View History

2026-07-12 14:22:00 +04:00
<!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>Страница 6</title>
</head>
<body>
<p style="text-align: center">
<i><b>Страница 6</b></i>
</p>
<hr />
<h1 style="text-align: center">Решение проблем коллизий</h1>
<h2 style="text-align: center">Метод цепочек или прямое связывание [5, c. 170-171]</h2>
<p style="text-align: justify">
В хеш таблице с прямым связыванием (рис 6.1) значения ключей (бункеры)
хранятся в специальных наборах записей, называемых <i>блоками.</i> Каждый
из них является вершиной связного списка, в котором находятся привязанные
к блоку элементы.
</p>
<div style="text-align: center">
<img src="6.1.png" height="350" />
<p style="text-align: center">Рисунок 6.1 - хеш-таблица с прямым связыванием</p>
</div>
<p style="text-align: justify">
Поиск элементов в хеш-таблице пройдёт быстрее, если связанные списки будут
содержать ключи в отсортированном порядке. В этом случае алгоритм сделает
вывод, что ключа нет, если дойдёт до значения больше ключевого и не станет
просматривать список до конца. Теоретически время его работы составит
<i>O(N/B)</i>, но на практике оно будет немного меньше.
</p>
<p style="text-align: justify">
Чтобы найти нужный элемент, программе необходимо хешировать ключ и
определить, в каком из блоков он может содержаться, а затем двигаться по
связному списку до тех пор, пока не будет достигнут его конец или не
обнаружится искомое. Если вы доберётесь до конца списка, значит,
запрашиваемого элемента в хеш-таблице нет. Как и в случае с добавлением
элемента, предстоит выполнить <i>O(N/B)</i> шагов.
</p>
<p style="text-align: justify">
Хеш-таблица с прямым связыванием может расширяться и сжиматься<sup>1</sup>
по мере необходимости, поэтому вам не нужно специально изменять её размер.
Однако если связные списки станут слишком длинными, поиск и удаление
элементов займут много времени. В этом случае вам понадобится увеличить
таблицу, чтобы создать больше блоков. Поскольку при рехешировании таблицы
не надо проводить поиск дубликатов до конца связного списка в каждом
блоке, полностью справиться с операцией можно за время <i>O(N)</i>.
</p>
<hr />
<p>
<sup>1</sup>Удаление элементов в данном методическом материале
рассматриваться не будет
</p>
</body>
</html>