Скачиваний:
273
Добавлен:
15.06.2014
Размер:
2.04 Mб
Скачать

Если в процессе проверки выяснится, что очередной элемент не принадлежит к цепочке, соответствующей требуемому хеш-адресу, то дальнейший поиск не нужен.

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

шие биты служат идентификатором вычисленного адреса и хранятся в ячейке совместно с ключевым словом. Младшие разряды виртуального хеш-адреса образуют истинный адрес ячейки внутри таблицы.

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

2.3.Структура и форматы таблиц хеширования

2.3.1.Непосредственная и косвенная адресация

Индексные ТХ

Таблицы хеширования, как правило, строятся исходя из максимальной

длины ЭД, размеры которых могут изменяться, в результате чего часть памяти будет использоваться непроизводительно. Кроме того, с увеличением длины записей возрастает трудоемкость (время) поиска. Если разместить ЭД в специально отведенной области памяти, а в основной ТХ хранить только указатели, содержащие адреса элементов в этой области и соответствующие идентификаторы, то при такой структуре в процессе поиска проверке подвергаются только ключевые слова (или их идентификаторы) и обращение к отдельной области памяти производится только после того, как будет найден требуемый элемент. Таким образом, допуская некоторые увеличения количества обращений к памяти (что неизбежно при использовании многоуровневой памяти), можно повысить эффективность поиска. Преимущество предлагаемой схемы состоит также в том, что при необходимости основную ТХ (которую в дальнейшем будем на-

43

зывать индексной ТХ) можно без особых затруднений поместить в другую область.

Индексные ТХ достаточно распространены, особенно в СУБД. Однако если они используются в качестве таблиц символов с короткими именами , то косвенная адресация описанного типа приводит лишь к увеличению количества вспомогательных операций.

Комбинированная адресация в ТХ (ступенчатое хеширование)

Рассмотренный выше принцип построения ТХ можно рассматривать как простейшую форму косвенной адресации. Ее можно сделать более эффективной, если в одной и той же таблице наряду с косвенной адресацией использовать и прямую (непосредственную) адресацию. Для задания режима адресации в каждой ячейке таблицы отводится специальный разряд, именуемый флажком связи.

Напомним, как аналогичный принцип реализуется в современных ЭВМ. На рис. 2.4 показана структура типовой машинной команды.

Можно было бы прямо в поле кода операции (КОП) указать, является ли содержимое адресного поля константой или адресом. Это может быть задано специальным признаком D/I (непосредственная или косвенная адресация).

 

 

D/I

 

 

 

D/I

а

 

 

 

 

 

 

 

КОП1

0

Операнд

б

КОП2

0

Адр. (операнд)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D/I

в КОП3 0 Адр. (адр./операнд)

Рис. 2.4. Структура типовой машинной команды

Если D/I = 0, то в указанном поле записан непосредственный, или абсолютный, адрес ячейки, в которой находится искомый операнд.

Если D/I = 1, то истинный адрес извлекается из специальной таблицы либо из набора регистров, номер регистра или записи в таблице указывается в по-

ле адреса (это метод косвенной адресации).

44