Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП, ТВП / ТЯПМТ / Пособие.doc
Скачиваний:
161
Добавлен:
11.05.2015
Размер:
2.37 Mб
Скачать

Int procedure rehash(int n)

if n<p then n+1 else 1.

У этой функции есть тенденция создавать в таблице кластеры в той же мере, в какой вероятность кластеризации возрастает в связи с перехешированием. Весьма желательно, чтобы функция перехеширования могла находить адреса подальше от того, с которого начала. Если элементы таблицы простые числа (т.е. не имеют других делителей кроме 1), то вместо 1 функция перехеширования может добавлять к адресу любое положительное целое число h, такое чтоh<p; в результате бы имели

Int procedure rehash(int n)

if n+h<p then n+h else n+h-p.

Подходящее значение hсводило бы кластеризацию к минимуму. Так какp- простое число, функция перехеширования выдаст последовательно все адреса в таблице, прежде чем она повторится.

Есть много других вариантов избежать перехеширования при создании таблиц идентификаторов. Рассмотрим некоторые из них.

  • Сцепление элементов.В этом случае переполнения таблиц можно избежать путем использования указателей (рис. 7.1.)

AGE

BAT

CAT

COW

CASE

Рис. 7.1. Сцепление элементов

Для этого в таблице необходимо предусмотреть место для указателей, что ведет к увеличению объема последней.

  • Бинарное дерево. Бинарное дерево (рис. 7.2.) состоит из некоторого количества вершин, каждая из которых содержит идентификатор, его тип и т.д., и двух указателей на другие вершины.

LEMON

EGG

MOUSE

BUS

HADDOCK

Рис. 7.2. Бинарное дерево

Бинарное дерево, приведенное на рис. 7.2, упорядочено в алфавитном порядке слева направо (т.е. его вершины расположены в алфавитном порядке их обхода изнутри). Поддерево любой вершины обозначается с помощью указателя. Поиск осуществляется с использованием рекурсивного алгоритма обхода: пересечь левое поддерево, пройти корень, пересечь правое поддерево. К бинарному дереву всегда можно добавить новую вершину, поместив ее в соответствующее место. Время поиска зависит от глубины дерева.

Расплачиваться за использование бинарного дерева в качестве таблицы символов приходится дополнительным объемом памяти, требуемым для указателей.