Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Левковиц, Д. Структуры информационных массивов оперативных систем

.pdf
Скачиваний:
3
Добавлен:
21.10.2023
Размер:
8.9 Mб
Скачать

ния однозначных

усечений

ключевых

слов переменной

длины на отдельной дорожке, рассмотренных выше.

Н а п р и м е р ,

при декодировании B A K E R сравнение на

первом уровне

показывает,

что

 

 

 

B A K E < B E L M .

 

Сравнение

с дорожкой

7'оо показывает:

В А К Е > В А І ;

 

 

B A K E < B E L M .

 

П р а в и л а декодирования

последнего

уровня в приме­

нении к д о р о ж к е

Т02 дают:

 

 

B A K E R # . B E L L S ;

 

 

В А К Е = £ B E L M ;

 

 

 

 

 

ВА

=И=.ВЕ;

 

 

 

 

 

В

= В .

 

 

 

В

результате декодирования

получается

адрес

связи

Л і 2 с длиной

списка L i 2 .

 

 

 

К

этому

дереву

применимы

правила

оперативного

обновления постоянного дерева.

Однако при этом

про­

цедура обновления

д о л ж н а обеспечивать

возможность

генерации нового однозначного фрагмента и регенерации дорожки в целом.

6-3. ДЕРЕВО ПОЛНЫХ КЛЮЧЕВЫХ СЛОВ ПЕРЕМЕННОЙ ДЛИНЫ

Сохранение полного ключевого слова гарантирует одно­ значность декодирования . Существуют два способа де­ кодирования с сохранением полных ключевых слов. Тре­ бующий больших з а т р а т памяти, но более простой в от­

ношении программирования способ состоит в

примене­

нии к полному ключу правил создания дерева

перемен­

ной длины, приведенных выше. Другой подход, требую­

щий

более сложного программирования,

но

экономный

в отношении памяти, состоит в применении

процедуры

грамматического

разбора .

Объем требуемой памяти

в этом случае зависит от степени общности

начальных

букв

ключей. Д л я

словарей

дескрипторов

обычного есте­

ственного языка эта общность не столь высока, следо­ вательно, требуется больший объем памяти, чем при

ПО

 

 

 

 

E Eyers

 

el

lac

ar

гогіег unlap yson

/ К

/ К

Л

 

Л

Ъ Hey her

I Ison man

к кшеіі

der

ton

Л

bet son Рис. 6-3. Грамматический разбор имен табл. 6-1.

однозначном усечении, но несколько меньший, чем при хранении полного ключа. Грамматический разбор 15 имен (табл. 6-1) иллюстрируется па рис. 6-3.

6-4. МЕТОД РАНДОМИЗАЦИИ

При использовании метода рандомизации [Л. 13], иногда называемого кодированием с преобразованием *, ключе­ вые термины естественного языка постоянной или пере­ менной длины преобразуются в ключи постоянной длины из заданного диапазона целых чисел. Д л я этого над исходными ключевыми терминами выполняются опреде­

ленные математические действия. Например,

если

за­

дан диапазон целых чисел

0 — 1023, то

из ключевого

тер­

мина, представленного

в

коде BCD **,

можно

выделить

10 бит и использовать их

как фрагмент

(ключевую ссыл­

ку) постоянной длины.

 

В

результате

могут,

конечно,

получаться дублированные ссылки, как это бывает при усечении дерева ключевых слов постоянной длины . Дей ­

ствительно, если

в

рассматриваемом

примере система

содержит более

1 024

ключей, то

получается

дублирова­

ние

(несколько

полных ключей

могут

преобразовывать ­

ся

в одну ключевую

ссылку) . Если отображение ключей

в ключевые ссылки

сделать по

возможности

равномер­

ным, то количество

дублирований можно

уменьшить.

(Равномерное отображение означает,

что д л я

заданного

набора ключей отклонение от среднего количества дуб­ лированных ссылок минимально.)

* Английский термин hash coding. (Прим. пер.)

** Американский двоично-десятичный код. (Прим. пер.)

П р о щ е

всего выполнить

одну или несколько арифме­

тических

операций либо

над

всем

закодированием

в BCD ключом, либо н а д

его частью,

а затем провести

операцию

выделения . Это

удалит

из кода регулярность,

присущую некоторым комбинациям букв в естественном языке (например, повторения некоторых последователь-

КлючХ ключУ. ключУг

 

А

і

L

 

 

Рандомиаировать в:

 

 

1

&

У

 

 

\

 

Обл.1

Облх

^Обл.у

Обл.п

 

Обл. 2

Яу

— f>„

Я,.

я2

ях

Я^Ключ X/Lx/0

[Данные 1 к'лючах\

Яу:ключУ,/1.уіУі

Данные ' ключа YA

\Яу:ключ

[Данные"] ключа £j

Рис. 6-4.

Декодирование справочника ключей с помощью

 

 

 

метода рандомизации.

 

 

ностей

букв

в приставках,

корнях и с у ф ф и к с а х ) .

Так,

к а ж д о е

машинное слово,

с о д е р ж а щ е е

закодированное

в BCD

ключевое" слово,

можно

возвести

в к в а д р а т и

выделить из

результата

к а ж д ы й

четвертый бит. Если

ло-

статочного количества знаков не получилось, то можно

выделить к а ж д ы й четвертый бит, отсчитанный

от

второго

бита,

и т. д. П о д о б н а я операция выполняется

до

выде­

ления

нужных п бит. П р и этом ключевая ссылка

 

посто­

янной длины будет находиться в диапазоне 0

2П1.

Н а

рис. 6-4 и з о б р а ж е н процесс декодирования

спра­

вочника

ключей методом рандомизации . В верхней части

рисунка

показана последовательность областей памяти,

обозначенных Обл.

1,

Обл.

2,

Обл.

х,

..., Обл. у, ...

..., Обл.

п. Количество

этих

областей

соответствует за­

данному

диапазону

постоянных

ключей.

Следовательно,

112

при

рандомизации

входных

терминов

 

(ключей)

будет

выделяться

б л и ж а й ш е е

целое

число бит

из

[ogzN

в

сто­

рону

увеличения.

 

 

 

 

 

 

 

 

 

 

Н а

рисунке

показан

входной

ключ

(например,

тер­

мин

естественного

я з ы к а ) , обозначенный

как

ключ X.

Этот

ключ

надо

рандомизировать

в

число

х,

л е ж а щ е е

в диапазоне 1N.

О б р а щ а ю т с я

к

 

области

памяти

Обл.

X. Внутри этой области содержится адрес

данных

Ах, соответствующих ключу X (Обл.

1 Обл.

п

могут

храниться в оперативной памяти или

З У П Д в

зависи­

мости от величины п, наличия места в оперативной

па­

мяти

и

заданной

скорости

д е к о д и р о в а н и я ) .

Д р у г и м и

словами, Ах

является косвенной адресной ссылкой

к

вы­

ходной записи декодера, имеющей переменную длину и

соответствующей ключу X. Внутри этой записи

обла ­

сти Ах) находится заголовок

записи

данных

ключа X,

затем .длина списка ключа X,

а потом

идет нулевое

поле,

у к а з ы в а ю щ е е в данном случае местонахождение

дан ­

ных ключа X внутри рассматриваемой записи.

 

 

Структура данных внутри

этой

записи переменной

длины зависит от структуры файла . Если файл имеет структуру связанного списка, то данные ключа X явля ­

ются адресом связи с первой

записью. Б о л е е того, если

подполе

ключа X

(заголовка)

имеет 'постоянную

длину,

то

выход

декодера

в целом (т. е. все д а н н ы е в

записи

Ах)

можно передвинуть в Обл.

х. В этом случае

уровень

косвенных адресов не нужен .

Тогда, если

выходная

запись в целом содержит w слов, то Обл.

x=wx.

 

Если ф а й л имеет структуру

инвертированного

спис­

ка, то д а н н ы е ключа X являются

инвертированным

спис­

ком переменной длины, с о д е р ж а щ и м адреса или номера доступа.

К а к показано в верхней части

рисунка, д в а

ключа

Yi

и Yz рандомизируются в одно

и то ж е число у

и

соответ­

ственно

(с помощью

области у) — в область Аѵ,

которая

хранится в

З У П Д .

В области

Ау

содержится

поле

за ­

головка, определяющее полную ссылку д л я

ключа

Уь

длину

списка ключа

Уі (Lvi)

и

адрес

связи

Ау2.

Этот

адрес

указывает,

что в ф а й л е

имеется

д р у г а я

запись

с ключевым

словом

(в данном случае это Yz),

рандоми-

зируемым в то ж е

самое число

(у),

что и ключ

Уі. М о ж ­

но без труда определить, является ли найденная

запись

искомой.

Д л я этого

н а д о сравнить входной

ключ

(Уі

или Yz)

со ссылкой

в начале

поля

заголовка . Если срав-

8—88

113

нения

не произошло,

т. е. был

декодирован ключ У2, то

о б р а щ а ю т с я к записи,

хранимой

в области Аѵ% и сравни­

вают

заданный ключ

с первым

подполем поля заголовка

этой записи (в данном случае содержит ключ У2 ). Затем проверяют длину списка для ключа У2 и адрес связи (равный н у л ю ) . Нулевой адрес связи указывает на от­ сутствие дальнейшего зацепления . Если в некоторый мо­

мент времени добавить в этот файл

другой

ключ, ска­

жем,

ключ

Уз,

который

т а к ж е

будет рандомизирован

в

число

у,

то цепь будет

расширена

на

один элемент,

а

третье

подполе

заголовка Л у 2

будет

содержать

адрес

связи Ауз.

Этот

адрес

будет д а в а т ь

ссылку

на

запись

данных

ключа У3 . П о л е

заголовка записи,

соответствую­

щей

ключу У3, будет иметь вид ключ

У з Д . у 3 / 0 .

 

 

 

Если требуются более простые (по сравнению

с

по­

казанными

в табл . 3-1)

информационные

структуры,

то

обобщенный рандомизатор

(рис. 6-4)

упрощается

и при­

нимает более специализированную форму. Например,

если

записи ф а й л а . содержат

только

по одному

ключу

(т. е.

имеется система запросов с единственными

ключа­

ми,

подобная

банковскому

примеру,

рассмотренному

в гл.

1) и если

длины записей

постоянные, то промежу­

точный файл и справочник объединяются. В этом случае ключи можно рандомизировать непосредственно в адре­ са записей файла . Это означает, что если ключ записи, имеющей длину w, рандомизируется в число х, то адрес

записи

равен wx. При

этом зацепление ключей т а к ж е

необходимо.

 

Н а

рис. 6-5 показана другая модификация, которую

можно

использовать для

файлов со структурой связного

списка. В целях экономии памяти д л я выхода декодера создается промежуточный уровень косвенной адресации. В качестве заголовков используются поля ключей в за­

писях файла . Н а

рис.

6-5

показано,

что

записи

файла

хранятся

в областях Ах,

Ау1

и АУ2,

а заголовок,

содер­

ж а щ и й с я

только

в головной

записи списка,

обозначается

звездочкой. В общем случае запись содержит ключи как

со звездочками,

т а к

и без

них. Ключи

со

звездочками

обозначают заголовок ключей списка. Подполе

этого

объединенного

заголовка

справочника

и

поле

ключа

записи следующие:

полный ключ/длина

списка/адрес

связи со следующей записью в файле, с о д е р ж а щ е й дан­ ный ключ/цепной адрес ( 0 , если нет цепи)/рандомизи ­ рованный код (если цепной адрес не равен 0 ) . Рандо -

114

мизированный код идентифицирует соответствующую цепь, если сравнение с полным ключом не дает положи­ тельного результата. Пусть, например, надо декодиро­

вать ключ Ко. Он рандомизируется

в число у

и из него—-

в Ау с помощью

Обл.

у. Проверка

полей всех

ключей со

звездочками не

дает

отождествления ключа

 

К2 первому

ключх ключУ] НлючУг

I і \

Рандомиаироватъ в:

 

 

 

1.

1

 

 

 

ч

 

ч

У

 

 

Обл.1

 

 

Обл.Н

Обл. 2

Обдх

^oL.y

 

---

 

 

 

я,

h.

 

 

 

 

 

 

 

 

Ях- ключи *Ключ

Х/іх/Щ/0/

 

 

 

 

\Данные\

 

 

 

 

 

[записи J

 

 

 

 

 

 

ключи I * Ключ Yj/LyjLRyjHyJy

 

 

 

Данные

S .

• ключи*Ключ

 

 

 

записи_

Д„

 

 

 

Уг

 

 

 

 

 

 

 

Данныё\

 

 

 

 

 

 

[записи J

Рис. 6-5.

Декодирование справочника

ключей с помощью метода

 

 

 

рандомизации.

 

подполю. Единственный

способ

определить правильную

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

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

Если они весьма велики,

то ищется другая формула

рандомизации, д а ю щ а я

лучшее распределение кодов.

Из-за больших длин цепей теряется преимущество в ско- 8* 115

рости декодирования . Други м недостатком является не­ возможность автоматического поиска по диапазону (на­ пример, если требуется вести поиск в диапазоне AGE. BTW . 21—30). Это объясняется тем, что к а ж д у ю воз­ можную запись в файле надо знать заране е и декодиро­ вать отдельно от других записей.

6-5. ТРЕБОВАНИЯ ДЕКОДЕРА К ОБЪЕМУ ПАМЯТИ И ВРЕМЕНИ ДОСТУПА

Обычно крупные декодеры обрабатываю т словари клю­ чей объемом от нескольких тысяч до нескольких миллио-

 

 

Т а'б лиifa

6-3

 

Параметры~о5ъемов памяти декодера

 

 

 

Декодер*

 

Символ

Значение

V T

R

 

F T

с ,

Cr

Ci

с а

Сг

Си

c h

а

m

Nd

Л Ѵ

Nt

Ni

Nc

Общее количество символов на до­ рожке

Резервное количество символов на дорожке

Символ/фрагмент ключа

Символ/адрес ЗУПД

Символ/длина списка

Символ/заголовок

Символ/ключ

Длина цепи

Фактор ветвления дерева

Количество фрагментов ключей раз­ личной длины

Количество ключей в словаре

Количество дорожек, требующих для хранения /-го уровня дерева

Количество требуемых дорожек

Требования к памяти на дисках

Требования к оперативной памяти

X

X

 

X

X

 

X

X

X

X

X

X

X

X

X

 

X

 

 

 

X

 

 

X

XX X

X

X

X

X

X

 

X

X

X

X

X

X

X

X

X

* Столбец указывает тип декодера, к которому относятся параметры, FT—і стоянное дерево, VT—переменнее дерево, R—рандомпзатор.

116

HOB слов.

Поэтому можно ожидать,

что д л я

хранения

таблиц требуется в основном память

прямого

 

доступа.

Хранение части таблиц в оперативной

памяти

требуется

лишь при

повышенных требованиях

к времени

ответа.

При этом экономится одно обращение

к З У П Д .

 

Конечно,

в процентном отношении экономия м о ж е т быть сущест­ венной. Например, в случае упорядоченного дерева с п уровнями размещение первого уровня в оперативной па­

мяти

экономит приблизительно 1 / я Х І 0 0 % общего

вре­

мени

доступа.

 

Р а с с м а т р и в а е м ы е ниже формулы предназначены

д л я

иллюстрации взаимосвязей м е ж д у объемом словаря, па­

раметрами декодера

(например, глубиной

дерева) и

средней длиной цепи

рандомизатора, а т а к ж е

временем

декодирования и требуемым объемом памяти . Эти фак­ торы с учетом неоднозначности декодирования, возмож ­ ности поиска по диапазону и сложности программирова ­ ния дают возможность разработчику создать декодер, подходящий для его области применения. Список пара ­ метров, входящих в формулы, приведен в табл . 6-3.

6-5-1. Формулы для дерева декодера Для расчета требуемого объема памяти д л я упорядочен­

ного

дерева вначале надо определить количество вет­

вей,

выходящих из к а ж д о й вершины дерева . Этот пара­

метр

называется

фактором

ветвления т.

В соответст­

вии

с принципом

упаковки

максимально

возможного

количества ключей в вершине величина m зависит от общего доступного пространства в максимально возмож ­

ной физической записи,

хранимой

в

З У П Д

(которая

соответствует размеру буфера

оперативной

п а м я т и ) , и

от объема памяти, требуемого

д л я

хранения

декодирую­

щей тройки ключ (фрагмент)/адрес/длина списка.

Д л я

простоты положим, что д л я хранения

физической

записи

требуется одна

д о р о ж к а

(для

любого

другого

блока

па­

мяти читатель

может использовать

в

этих рассуждениях

вместо понятия

дорожки

понятие

б л о к а ) .

 

 

m,

Md

Необходимо

вычислить

значения

параметров

и M с, а т а к ж е

выразить

их

через

целые числа

Nt

и

Nti.

Д л я округления до целого используются следующие обо­ значения:

рациональное число х можно представить как

117

где INT является целым числом, a R— дробным остат­ ком. Затем обозначим:

 

 

 

I N T _ M = I N T ;

 

 

 

 

 

 

I N T + [X]

=

I N T + 1 ,

если

 

ЯфО,

 

 

INT,

 

если

R =

0.

 

 

 

 

 

 

 

Если объем доступного на д о р о ж к е пространства

ра­

вен

Ci—Сг, то для

постоянного

дерева

 

 

 

 

/га =

I N T .

Г

с - * ~

с '

С I

1

 

(6-1)

 

 

 

 

С, +

С 0

+

 

 

 

а для переменного

дерева

 

 

 

 

 

 

 

 

 

/л =

I N T .

Ct

— Cr —

NdCn

 

(6-2)

 

С , +

C a

+

C t

 

 

 

 

 

 

 

 

 

 

Так как на нижнем уровне любого дерева должны

иметься все ключи словаря Nu, исключая остаток,

ча­

стично заполняющий одну д о р о ж к у

на

следующем,

бо­

лее

высоком уровне [например,

ВАВВ

на

д о р о ж к е

Too

(рис. 6-1)], то количество дорожек, требуемых для со­ хранения низшего уровня я-уровневого дерева, равно:

 

tftn

= I N T _ [ ^ - ] . •

 

(6-3)

К а ж д а я д о р о ж к а

следующего

(более

высокого)

п1-го уровня

дерева

соответствует

m д о р о ж к а м уров­

ня п или количеству фрагментов ключей,

равному

тг.

Следовательно,

для хранения словаря

из Nu

ключей

тре­

буется WT+[Nh/m2] дорожек на уровне п1. Все пред­ шествующие уровни, включая первый, должн ы также равняться INT+, а для хранения каждого последующего (более высокого) уровня требуется \/т дорожек, исполь­ зуемых д л я хранения предыдущего уровня. Поэтому при­

водимые ниже формулы дают возможность

рассчитать

количество дорожек, требуемое д л я

хранения каждого

уровня дерева в З У П Д :

 

 

tftn=INT_

 

 

 

il—

(6-4)

i = l.

1;

 

 

(6-5)

Md = CiNi.

 

(6-6)

118

Если высший уровень дерева хранится в оператив­ ной памяти, то

Mc = Nu_(Ci + Ca);

Md = C t i

N t i .

:

о

I

f

( 6 _ 7 )

I

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

хранения ключей

З У П Д

(т. е. можно хранить ключи

в выходном уровне д е р е в а ) . В этом

случае

формула (7)

читается следующим

образом:

 

 

 

 

 

Ntt(C,

+

Ca)-\

 

 

A f l a

 

 

N

1

>

(6-7а)

 

= I N T +

 

 

 

Р а с с м а т р и в а я

значения

Nu

в

формуле (6-4) для

т > 1 0 и Nh в диапазоне

до

100 000,

можно

увидеть, что

Nti^^Nin

при

і = І ,

 

п—1.

 

Следовательно, можно считать, что количество доро­ жек, требуемое дл я хранения дерева с л ю б ы м числом уровней, составляет:

 

Nt~Nln

= mT_

 

 

 

(6-8)

На

рис. 6-6 иллюстрируется

применение

формулы

(6-4)

к трехуровневому дереву при m = 4 и Nk = 22.

К а ж ­

дая горизонтальная

п р я м а я обозначает

дорожку .

Вер­

тикальные штрихи на этих прямых р а з д е л я ю т

логиче­

ские записи (тройки

фрагментов

ключей),

а косые

штри-

Уровень1

ИровеНьг

Уровень 3 ^

•4 3 2 /

20 1818 17

1В 15 П13

12 11 10 3

8 7 S 5

Рис. 6-6. Пример трехуровневого дерева.

119

 

Соседние файлы в папке книги из ГПНТБ