книги из ГПНТБ / Левковиц, Д. Структуры информационных массивов оперативных систем
.pdfния однозначных |
усечений |
ключевых |
слов переменной |
|
длины на отдельной дорожке, рассмотренных выше. |
||||
Н а п р и м е р , |
при декодировании 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. |
||||||||||
Этот |
ключ |
надо |
рандомизировать |
в |
число |
х, |
л е ж а щ е е |
|||||||
в диапазоне 1—N. |
О б р а щ а ю т с я |
к |
|
области |
памяти |
|||||||||
Обл. |
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 |
|