книги из ГПНТБ / Левковиц, Д. Структуры информационных массивов оперативных систем
.pdfр а з в е т в л я ю т ся на три ветви. В конце этой части при про
ведении выборочного расчета будет показано, |
что на |
практике фактор ветвления обычно составляет |
несколь |
ко сотен. |
|
Дерево, показанное на рис. 6-1, является трехуровне вым деревом; первый уровень м о ж н о хранить в опера тивной памяти, а остальные два уровня — в З У П Д . Дл я иллюстрации определенной стратегии распределения па
мяти, применяемой при использовании |
некоторых типов |
З У П Д , предположим, что устройства |
памяти относятся |
ко второму или третьему типам, определенным в гл. 2. Если дерево нужно хранить на диске с неподвижны ми (фиксированными) головками или на барабане, то
последующие рассуждения остаются справедливыми.
Однако |
в этом случае |
не имеет |
значения, на каких до |
||
р о ж к а х |
хранятся вершины дерева . Н а |
рисунке |
обо |
||
значает /-ю д о р о ж к у і-го цилиндра. |
|
|
|||
Н а ч и н а я с нижнего уровня дерева, фрагменты клю |
|||||
чей, соответствующие |
полным |
ключам, |
можно |
читать |
в алфавитном порядке слева направо вместе с символи ческими адресами Аіз, Аі2, Аіи ..., Ai. Формат каждого поля внутри д о р о ж к и следующий: фрагмент усеченного
ключа/адреса связи с заголовком списка |
или с дорожкой, |
|
в которой хранится следующий |
уровень/длина списка. |
|
При создании дерева его |
вершины |
приписываются |
фрагментам ключей-терминов в прямом или обратном
порядке. |
В рассматриваемом примере выбран обратный |
|||||||
порядок, |
поэтому |
последние |
три |
фрагмента |
( E Y E R |
|||
D Y S O , |
D Ö N L ) помещаются |
в правую д о р о ж к у |
наиболе |
|||||
глубокого |
уровня |
Ті3. |
Соответствующие длины |
списков |
||||
Л І / L I , А2/Ьо |
и A3/L3 вместе с |
символическим |
заголовком |
|||||
адресов |
списка т а к ж е |
вводятся в |
запись. |
Последний |
фрагмент ключа на д о р о ж к е называется интервалом до
рожки . Он т а к ж е |
вводится в |
д о р о ж к у |
второго |
уровня |
||||||
в качестве ссылки. Следовательно, |
указателем последней |
|||||||||
записи д о р о ж к и Г 1 |
0 |
является |
E Y E R / Г І З , обозначающий |
|||||||
что E Y E R является |
последним |
фрагментом ключа |
на до |
|||||||
р о ж к е |
третьего уровня |
Тіз. П о л е |
длины |
списка, |
равное |
|||||
нулю |
( 0 ) , указывает, что эта ссылка относится к другой |
|||||||||
д о р о ж к е в справочнике, |
а не к |
списку |
в |
файле . |
|
|
||||
Следующие три фрагмента |
ключей |
(начиная |
с |
ниж |
||||||
ней части с п и с к а ) — э т о |
C R O Z , |
C A R T |
и C A R D ; |
они |
в свою очередь вводятся на следующую доступную до рожку (Т&) в соответствии с их адресами связи и дли-
100
нами списков. Последний |
фрагмент на д о р о ж к е — C R O Z . |
|||||
Он |
вводится |
на д о р о ж к у |
второго |
уровня |
ТІ0 как |
ссылка |
на |
позицию |
следующей |
записи |
и имеет |
ссылку |
и |
нулевую длину списка. |
|
|
|
|
||
|
К а к показано на рис. |
6-1, т р а к т о в к а следующих трех |
фрагментов аналогична; этим завершается д о р о ж к а вто рого уровня Гіп. Последний фрагмент дорожки Гю вво дится в запись первого уровня, которая хранится в опе
ративной |
памяти к а к |
EYER/Тю и у к а з ы в а е т |
последнюю |
запись на |
д о р о ж к е TiQ |
(EYER) . Д л и н а списка |
не исполь |
зуется, так как адреса связи уровня, хранимого в опера
тивной памяти, |
не |
ведут |
непосредственно |
к |
записям |
файла . |
|
|
|
|
|
Следующие |
три |
записи |
т а к ж е хранятся |
в |
обратном |
порядке. Это В А К Е , |
B A I L |
и BABS . Они помещаются на |
дорожку третьего уровня Т0І, а последний фрагмент име |
||||
ет ссылку на |
д о р о ж к у |
Г 0 0 |
в виде |
В А К Е / Г О і / 0 . |
В списке |
остается |
еще |
один |
фрагмент — В А В В . Н а |
дорожке Гоо свободны две позиции второго уровня, по этому дополнительная д о р о ж к а третьего уровня не нуж
на; В А В В помещается |
во |
вторую |
запись |
д о р о ж к и |
Too |
вместе с адресом связи |
Аіз |
и длиной |
списка |
L 1 3 . Послед |
|
ним фрагментом дорожки |
второго |
уровня |
является |
те |
перь В А К Е . Он вводится в запись первого уровня в ви де ссылки ВАКЕ/ГооЭтим завершается создание трех
уровневого |
дерева |
д л я |
15 |
ключей, список которых |
дан |
||||||
в табл . 6-1. |
|
|
|
|
|
|
|
|
|
|
|
Необходимо отметить, что в действительности |
имеет |
||||||||||
ся только |
13 |
ключевых ссылок, т а к |
как два |
ключа |
де |
||||||
кодируются неоднозначно. Это имена |
B E L L и |
B E L L S O N , |
|||||||||
которые оба сводятся к B E L L , и B L A C K и B L A C K W E L L , |
|||||||||||
которые сводятся к В L A C . |
|
|
|
|
|
|
|
||||
Декодирование |
с помощью |
этого |
дерева |
выполняется |
|||||||
следующим |
|
образом . |
Пусть |
надо |
декодировать |
|
имя |
||||
CARD ER. Д л я получения фрагмента |
ключа |
выделяются |
|||||||||
первые четыре буквы CARD. Поиск на уровне оператив |
|||||||||||
ной памяти дает, что CARD старше (при алфавитном |
|||||||||||
упорядочении), чем В А К Е , |
но |
младше, чем |
EYER; |
сле |
|||||||
довательно, о б р а щ а ю т с я к |
д о р о ж к е |
второго |
|
уровня |
Гю- |
||||||
Эта д о р о ж к а |
просматривается |
и определяется, |
что |
CARD |
|||||||
старше, чем B L A C , но младше, чем CROZ; поэтому про |
|||||||||||
исходит обращение к д о р о ж к е |
третьего уровня Г 1 2 . Вну |
||||||||||
три д о р о ж к и |
Тіі точное отображение CARD |
|
содержится |
||||||||
в первой записи. |
Н а |
этом |
декодирование |
завершается |
101
Его |
результатом являются |
адрес |
связи |
Л 6 |
и длина спис |
||||
ка |
Ьв. |
|
|
|
|
|
|
|
|
|
С помощью этого дерева все ключи, |
кроме |
ВАВВЕТ, |
||||||
будут |
декодироваться |
за |
два |
обращения |
к |
диску, |
|||
а В А В В Е Т — за одно обращение. Если следовать |
указан |
||||||||
ной |
схеме нумерации |
дорожек, |
то при |
первом |
обраще |
||||
нии (ко второму уровню дерева) |
требуется |
перемещение |
|||||||
головок |
и поворот дорожки, |
в то время |
как второе обра |
щение (к третьему уровню) происходит внутри одного цилиндра и требует лишь поворота диска.
Вообще говоря, в вершине дерева надо представлять максимально возможное количество фрагментов. Это
объясняется тем, что к а ж д а я |
вершина занимает |
в |
З У П Д |
||||||
объем, |
соответствующий физической записи. Р а з м е р |
этой |
|||||||
записи |
ограничен объемом |
З У П Д |
либо оперативной |
па |
|||||
мяти. |
Обычно |
физическая |
запись |
соответствует |
полной |
||||
д о р о ж к е |
(например, в 3 000 |
символов) . Если |
тройка |
||||||
фрагмент ключа/адрес/длина списка состоит из |
15 |
сим |
|||||||
волов, |
то |
в к а ж д у ю вершину дерева можно |
поместить |
||||||
200 фрагментов |
и декодировать с помощью трехуровне- |
||||||||
го дерева |
(200) 3 = 8 млн. ключей. Это означает, |
что один |
выбор из 8 млн. ключей можно сделать за три обраще
ния к З У П Д (если верхний уровень, |
требующий 3 000 |
символов, не хранится в оперативной |
п а м я т и ) , и за два |
обращения, если верхний уровень хранится в оператив ной памяти .
М о ж н о предположить, что вершина с максимальным количеством фрагментов используется только для созда ния небольшого упорядоченного дерева; однако ниже
будет показано, что это является |
оптимальным |
подхо |
|||
дом . |
|
|
|
|
|
Предположим, что |
сравнения |
в вершине, |
хранимой |
||
в оперативной памяти, производятся |
последовательно |
||||
(на к а ж д о е сравнение |
требуется |
100 |
мксек, |
т. е. |
около |
25 машинных циклов) . Тогда максимальное время по иска ключа внутри вершины составляет 20 мсек, а сред н е е — 10 мсек. Процедуру сравнения можно оптимизиро вать, применяя поиск с бинарным разбиением. Тогда на
сравнение и упорядочение интервала требуется 200 |
мксек. |
|||||||
Количество сравнений |
равно в этом случае |
log2 200 = 8, |
||||||
а время поиска |
внутри |
вершины — 1,6 |
мсек. |
Д л я срав |
||||
нения заметим, |
что |
время |
обращения |
к З У П Д |
обычно |
|||
составляет |
20—500 |
мсек |
(точнее, 60—100 мсек). |
Следо |
||||
вательно, |
время |
просмотра |
большой вершины в |
опера- |
102
тнвной памяти незначительно по сравнению с временем обращения к отдельной вершине, хранимой в З У П Д (при использовании оптимального метода бинарногоразбие ния). Если просмотр не оптимизирован, это время со ставляет от 1/6 до 1/10 обычных времен обращения .
Чтобы иметь возможность оперативно обновлять файл, физические записи, с о д е р ж а щ и е вершины, не дол
жны быть плотно упакованы, т. е. в конце записи |
надо |
||||||||||
оставлять некоторое |
количество |
резервного пространст |
|||||||||
ва, |
обеспечивающего |
расширение |
вершины. |
Л а н д а у е р |
|||||||
[Л. |
12] |
рекомендует |
д л я большинства систем |
(основан |
|||||||
ных на различных способах обновления) |
оставлять |
в ре |
|||||||||
зерве 10% занимаемого объема памяти. |
Пусть, |
напри |
|||||||||
мер, |
к |
справочнику |
надо |
добавить ключевое |
|
слово |
|||||
BINDER . Сначала получается фрагмент |
B I N D , который |
||||||||||
старше, чем ВАКЕ, но младше, чем EYER, следователь |
|||||||||||
но, обращаются |
к д о р о ж к е Гю; B I N D младше, чем |
B L A C , |
|||||||||
следовательно, |
обращаются |
к д о р о ж к е |
Гц. |
Поскольку |
|||||||
B I N D |
старше, |
чем |
B E L M , |
но |
младше, |
чем B L A C , он |
|||||
должен |
находиться |
м е ж д у |
этими |
двумя |
фрагментами . |
Если предположить, что в оперативной памяти есть бу ферная память д л я ввода-вывода, то физическая запись
передается в буферную память вывода, |
причем |
B I N D по |
мещается между B E L M и B L A C вместе с соответствую |
||
щим адресом ссылки и длиной списка |
(равной |
единице, |
если это новый ключ) . Г/сли в конце записи есть резерв ное пространство, достаточное для помещения фрагмента нового ключа, то буферная память вывода не перепол нится. Поэтому этот фрагмент можно записать на дорож
ку Гц. Если в результате |
предшествующих |
обновлений |
||||
резервное |
пространство |
было израсходовано |
(10% |
ре |
||
зервного |
пространства |
на |
д о р о ж к е |
в 200 ключей |
дает |
|
возможность сделать 20 |
обновлений |
до переполнения), |
а дерево требуется оставить упорядоченным, то послед
ний |
фрагмент |
проталкивается на следующую дорожку |
того |
ж е самого |
уровня, т. е. следующую дорожку и до |
рожку более высокого уровня надо обновлять совместно.
Например, |
пусть |
на |
д о р о ж к у |
Ті2 добавляется |
B L A C , |
|||
а интервалом дорожки Гц становится затем |
B I N D |
(за |
||||||
меняющий |
B L A C |
на |
д о р о ж к е Гю). Если д о р о ж к а |
Г 1 2 |
не |
|||
имеет достаточного резерва, то на дорожке |
Тіз |
передви |
||||||
гается CROZ и т. д. Если получены сведения об исчер |
||||||||
пании резервного |
пространства |
д о р о ж е к или |
среднего |
|||||
количества |
продвижений, необходимых д л я |
выполнения |
103
обновления, то дерево полностью регенерируется н ре зервное пространство создается заново. Точный процент резерва является параметром программы обновления. Его значение в данный момент времени зависит от спо соба обновления справочника системы и ж е л а е м о г о пе риода регенерации. Кроме того, заметим, что требова ния при обновлении справочника обычно менее строгие, чем при обновлении файлов, поэтому 10%-ное значение
резерва |
по Л а н д а у е р у |
адекватно, по-видимому, д л я боль |
|||
шинства |
систем. |
|
|
|
|
В т а б л . 6-1 |
и на |
рис. |
6-1 изображен декодер с |
усе |
|
чением |
имен. |
П о д о б н а я |
стратегия не подходит для |
ре |
ального случая представления ключа в форме Имя/Ве личина (процедура усечения может разрушить всю Ве личину или ее значительную часть) . В этом случае воз можны два подхода. П е р в ы й состоит в усечении X сим волов в Имени и У в Величине и создании фрагмента ключа из двух фрагментов путем их объединения. Дру гой подход более гибкий, т а к к а к он дает возможность создать конструкцию деревьев, приспособленную к усе ченным Величинам. При этом создается двухуровневая иерархия деревьев, где первый уровень — это справоч ник Имен, а второй содержит справочники Величин. Пре
имущество такой иерархии состоит в |
том, что фрагмент |
|||
Имени |
не надо |
повторять с к а ж д ы м |
фрагментом |
Вели |
чины. |
Кроме |
того, к а ж д о е дерево |
Величин |
может |
впринципе иметь фрагмент своей длины, хотя все
фрагменты |
внутри |
одного и того ж е |
дерева |
одинаковы |
по длине. |
|
|
|
|
К р о м е |
быстрого |
декодирования |
больших |
справочни |
ков и относительно простого программирования, другое преимущество дерева состоит в возможности поиска по диапазону . Например, запрос 1 на рис. 4-2 вызывает по
иск ключа |
в диапазоне от |
AGE/21 до AGE/30. Системе |
|||
з а р а н е е |
не |
известно', |
есть |
ли в |
файле действительные |
значения |
ключевого |
имени |
AGE, |
поэтому желательно |
провести поиск по списку имеющихся ключей. М о ж н о
написать |
программу, которая |
будет декодировать |
дере |
||||
во И м е н |
(в данном |
случае она |
будет декодировать |
AGE) |
|||
и направлять |
его в |
дерево |
Величин. З а т е м она |
опреде |
|||
лит .границу |
наименьшей величины (21) и просмотрит |
||||||
дерево снизу |
вверх, |
начиная |
с этой точки и кончая |
верх |
|||
ней границей |
(30). Все величины, полученные при этом |
||||||
просмотре, декодируются в |
соответствующие |
адресные |
104
ссылки. Кроме того, для |
к а ж д о й из них |
проводится |
по |
иск по списку. |
|
|
|
В конце этой главы |
будут выведены |
формулы, с |
по |
мощью которых можно рассчитать число дорожек и уров ней, требуемых для словаря ключей заданного объема.
6-2. ДЕРЕВО ОДНОЗНАЧНО УСЕЧЕННЫХ КЛЮЧЕВЫХ СЛОВ ПЕРЕМЕННОЙ ДЛИНЫ
Этот метод декодирования справочников сложнее рас смотренного в предыдущем п а р а г р а ф е . Во-первых, фраг менты ключей имеют переменную длину, и программе заранее неизвестно, сколько полей фрагмента можно по местить на дорожку . Во-вторых, д л я минимизации объ ема требуемой памяти необходимо усечение ключевого
слова, д а ю щ е е |
однозначно |
закодированный фрагмент. |
|||||||
Набор правил кодирования приведен во втором |
и |
треть |
|||||||
ем |
столбцах табл . |
6-1. К а к |
и в |
случае справочника |
с по |
||||
стоянными |
(по длине) словами, ключевые |
слова |
вначале |
||||||
упорядочивают |
в |
алфавитном |
порядке |
(это |
показано |
||||
в |
левом |
столбце |
т а б л и ц ы ) . |
З а т е м |
(как |
показано |
во втором столбце) получается однозначно закодирован
ный фрагмент. Д л я этого |
используется |
наименьшее, |
на |
|||||||||
чиная |
слева, количество символов |
(требуемое |
д л я одно |
|||||||||
значного различения данного полного имени |
от |
непо |
||||||||||
средственно |
предшествующего |
имени) . |
Следовательно, |
|||||||||
В А В В Е Т (первое имя |
в |
данной |
последовательности) |
|||||||||
можно однозначно закодировать просто буквой |
В; |
|||||||||||
BABSON отличается от В А В В Е Т |
четвертой |
буквой; |
сле |
|||||||||
довательно, |
д л я |
того |
чтобы отличать B A B S O N |
от |
||||||||
ВАВВЕТ, требуется закодированный фрагмент BABS *. |
||||||||||||
Аналогично, |
B A I L E Y |
отличается |
от B A B S O N |
буквами |
||||||||
B A I , |
a B A K E R |
от B A I L E Y — б у к в а м и |
ВАК . |
Эта |
про |
|||||||
цедура применяется ко всему набору ключей; |
результат |
|||||||||||
этого показан во втором столбце табл . 6-1. |
|
|
|
|
||||||||
Д л я иллюстрации того, как |
закодированные |
фрагмен |
||||||||||
ты переменной длины хранятся в виде дерева |
в |
памяти |
||||||||||
на дисках |
и к а к |
это |
дерево |
декодируется, |
будут |
рас |
смотрены д в а примера. В первом примере все 15 имен (табл. 6-1) р а з м е щ а ю т с я на одной дорожке . Во втором, более общем примере будет рассмотрен случай много уровневого дерева .
* Очевидно, что BABSON в этом случае можно закодировать фрагментом ВА. (Прим. пер.) >
Г105
|
Распределение |
отдельной дорожки |
Т а б л и ц а 6-2 |
|
|
||
Номер записи |
Содержание дорожкн |
Комментарии |
|
|
|||
1 |
6,1 |
Ключ длимы 6 (1 ключ) |
|
|
BLACKW/AI.L, |
Ссылка на ключ BLACKWELL |
|
|
|
(в области файла |
/1,) с длиной |
|
|
списка Z-i |
|
2 |
5,1 |
Ключ длины 5 (1 |
ключ) |
|
B E L L S / A 2 / L , |
|
|
34,3 Ключ длины 4 (3 ключа)
C A R T / A S / L 3 B E L M / A 4 / L t BABS/A5 /L5
43,2
B A K / A 6 / L 0
BAI/A,'L,
5 |
2,4 |
|
|
D Y / A . / L , |
- |
|
C R / A . / L , |
|
|
B L / A 1 0 / 1 I 0 |
|
|
B E / A . . / L , , |
|
6 |
1,4 |
|
|
E / A i 2 / L , 2 |
|
|
D / A 1 3 / L I 3 |
|
|
C / A , . , / L u |
|
|
B / A 1 6 / L 1 5 |
|
Р а с п р е д е л е н ие |
отдельной |
дорожки |
показано |
в табл . 6-2. Таблица |
состоит из |
трех столбцов. |
В первом |
столбце указывается номер записи на дорожке . Во вто
ром — содержание д о р о ж к и |
внутри каждого поля запи |
си (каждое поле отмечается |
при помощи разделительной |
черты) . В третьем столбце содержатся комментарии, от
носящиеся к записям . Процедура состоит в перестанов |
|
ке фрагментов в порядке уменьшения |
их длин. В резуль |
тате этого самый длинный фрагмент |
B L A C K W , содержа |
щий шесть букв, появляется в заголовке списка; затем |
|
идет пятибуквенный фрагмент B E L L S |
и т. д. Первое поле |
в записи называется заголовком . В нем содержатся два
вида |
информации |
. Первый — это длина фрагмента, рав |
||
ная |
6 д л я записи |
1, а |
второй — количество |
фрагментов, |
содержащееся в |
записи |
(в данном случае |
1). Следова- |
106
тельно, программа декодирования осуществляет чтение фрагмента длины 6 с соответствующими адресом связи и длиной списка - и в записи будет только один такой триплет. Bo-второй логической записи содержится един
ственная тройка, |
длина фрагмента |
в |
которой |
равна 5. |
||||
В третьей записи содержатся три |
тройки |
с |
длинами |
|||||
фрагментов |
4, а |
именно |
CART, B E L M |
и BABS . |
Таким |
|||
образом, в целом |
д о р о ж к а |
планируется |
в порядке |
умень |
||||
шения длин |
фрагментов. |
Вообще |
говоря, |
эта |
д о р о ж к а |
является одной из многих, содержащих списки закоди рованных фрагментов.
Декодирование информации, записанной на дорожке, выполняется следующим образом. Пусть надо декодиро вать имя BABSON, и логика дерева приводит к рассма
триваемой |
дорожке . |
В |
этом |
случае физическая |
запись |
||||||
(т. е. д о р о ж к а ) |
считывается |
в |
оперативную |
память |
це |
||||||
ликом. П е р в а я |
запись |
указывает, |
что |
шесть |
букв |
||||||
имени B A B S O N надо |
сравнить |
с фрагментом |
B L A C K W , |
||||||||
т а к ж е состоящим |
из |
шести |
букв, — сравнение |
окажется |
|||||||
неудачным. |
Тогда программа |
удалит |
одну |
букву |
из |
||||||
фрагмента B A B S O N и сравнит |
первые пять букв с пяти- |
||||||||||
буквенньш |
фрагментом |
B E L L . |
Сравнение опять |
окажет |
ся неудачным. З а т е м программа сравнит первые четыре
буквы В AB S с |
фрагментами |
CART, |
B E L M и |
BABS . |
В итоге слово B A B S O N однозначно декодируется в со |
||||
ответствующий |
адрес связи |
Ай. Неоднозначность |
деко |
|
дирования слов |
B E L L S O N и |
B E L L |
(в предыдущем де |
реве) можно уничтожить, если закодировать их соответ
ственно как B E L L S |
и |
BE. |
|
Однозначность |
поиска гарантируется т а к ж е |
сравне |
|
нием полного ключа, |
хранимого в найденной |
записи, |
с з а д а н н ы м при поиске ключом. Например, если оши
бочное |
декодирование слова |
B I N D E R привело |
к фраг |
|||
менту В |
(соответствующему |
слову В А В В Е Т ) , |
то |
ошибка |
||
обнаружится при обращении к записи файла и |
сравне |
|||||
нии хранимого в ней |
полного .ключевого |
слова |
В А В В Е Т |
|||
с з а д а н н ы м ключом |
B I N D E R . |
|
|
|
||
Д л я |
добавления |
в справочник нового |
ключевого сло |
ва применяется следующая процедура: слово вначале,
декодируется д л я обнаружения избыточного |
фрагмента |
||
(если избыточно закодированного фрагмента |
нет, |
то |
|
в качестве фрагмента берется н а ч а л ь н а я |
буква с л о в а ) . |
||
Затем разыскивается избыточное ключевое слово, |
у ж е |
||
имеющееся в файле. При этом возможны |
два |
случая. |
107
1. |
Новое слово |
алфавитно |
предшествует |
старому |
слову. |
В этом случае новому |
слову ставится |
в соответ |
ствие ранее закодированный фрагмент, а старому слову
назначается |
|
более |
длинный |
фрагмент |
для |
отличия |
его |
|||||||
от нового слова . Например, пусть в существующий |
спра |
|||||||||||||
вочник |
надо |
занести |
имя |
B L A B . |
Оно |
декодируется |
||||||||
в фрагмент |
B L , ранее назначенный слову B L A C K . Слово |
|||||||||||||
B L A B алфавитно |
предшествует слову |
B L A C K , |
поэтому |
|||||||||||
слову |
B L A B |
н а з н а ч а е т с я |
фрагмент |
B L , а |
д л я B L A C K |
|||||||||
создается |
фрагмент B L A C |
(чтобы |
отличать |
его |
от |
|||||||||
B L A D ) . Н а |
остальную |
часть |
списка |
это |
не |
влияет, |
пото |
|||||||
му |
что следующее |
слово |
B L A C K W E L L , |
очевидно, |
||||||||||
не совпадает с более коротким фрагментом |
слова B L A C K |
|||||||||||||
и тем более не может совпасть с любым более |
длинным |
|||||||||||||
фрагментом . |
|
|
|
|
|
|
|
|
|
|
|
|||
2. |
При |
декодировании |
обнаруживается, |
что |
новое |
|||||||||
слово |
|
алфавитно |
следует |
за |
старым. |
В этом случае |
за |
старым словом закрепляется наименьший закодирован ный фрагмент, а новому слову назначается фрагмент минимальной длины, при которой его можно отличить от
старого слова. |
|
|
|
|
|
Рассмотрим |
создание трехуровневого дерева |
д л я 15 |
|||
ключевых |
слов |
(рис. 6-2). Создание дерева |
начинается |
||
с правого |
края . |
К а ж д а я логическая |
запись |
отделяется |
|
внутри д о р о ж к и |
двойными линиями. |
К а к и |
в |
случае |
дерева ключевых слов постоянной длины, чтение проис ходит в алфавитном порядке слева направо; создание дерева справа налево выполнялось бы в обратном по рядке. После заполнения дорожки нижнего уровня в со
ответствующую запись помещается |
у к а з а т е л ь |
ссылки |
||
на следующую запись более высокого уровня. |
З а т е м |
|||
начинается новая д о р о ж к а низшего |
уровня. П р и |
исполь |
||
зовании резервного пространства д л я дерева |
ключевых |
|||
слов переменной длины требуется подсчет |
количества |
|||
фрагментов ключей, помещенных |
на |
данную |
дорожку . |
Это количество может зависеть от переменной длины
самих закодированных |
фрагментов, |
а т а к ж е |
от того, |
что |
||||||||
закодировнные |
фрагменты |
одинаковой |
длины |
можно |
||||||||
сгруппировать |
под |
одним и |
тем |
ж е |
заголовком . |
|
||||||
Д л я |
определенности |
предположим |
в этом |
примере, |
||||||||
что |
в |
к а ж д о й |
д о р о ж к е с о д е р ж а т с я |
четыре |
фрагмента . |
|||||||
Это |
означает, |
что |
в случае |
трехуровневого |
дерева |
на |
||||||
первых двух уровнях требуются только две |
возможности |
|||||||||||
ветвления (для |
декодирования |
на |
третьем, |
уровне |
108
15 фрагментов) . Здесь |
используется |
принцип отдельной |
||||||
дорожки, |
показанный |
на рис. 6-1; следовательно, |
фраг |
|||||
ментация |
15 ключей |
в |
начальный |
момент |
проводится |
|||
так, как показано |
в третьем |
столбце |
табл . 6-1. Усечение |
|||||
каждого |
набора |
из |
четырех |
фрагментов |
выполняется |
|||
однозначно, независимо |
от других наборов. |
Эти |
фраг- |
|||||
|
І1/В£Ш/Г00 |
|
|
Ѵ/Е/Тю |
|
|
|
|
|
|
7—: — |
|
|
|
|
|
|
№*fo, |
II WBELM/T0Z |
V////////////mt% |
\ |
|
|
|
|
VWVTn |
II VWn |
І |
^ |
Ш |
^ |
^ |
Ш |
||||
Д . |
|
|
\ |
|
V |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j |
|
„ |
i |
|
|
|
|
|
|
|
|
|
\ 16.l/BUICKW/H5/ls\\iJ/CflRT/fls/Le |
|
J! IZ/C/fy/Li/B/Ag/lB |
|||||||||
|
|
L |
2J/BE/A„/L„ |
Ѵ/в/А,г/£,2 |
|
|
|
|
|||||
ü/QEaS/Ra/lg, y/BELM/R,0/L,o |
|
|
|
|
|||||||||
|
|
ІФУ/Я,/І, |
II |
|
Iß/E/flz/Lz/m/Ls/C/flj/lJMZ^ |
||||||||
Рис. 6-2. Дерево |
однозначно |
усеченных ключевых |
слов |
переменной |
|||||||||
|
|
|
|
длины. |
|
|
|
|
|
|
|
|
|
менты хранятся на д о р о ж к а х |
третьего |
уровня: Т\% Tu, |
|||||||||||
Toi и Foi (рис. 6-2). Последний в алфавитном |
|
порядке |
|||||||||||
фрагмент |
д о р о ж к и третьего |
уровня |
помещается |
( т а к ж е |
|||||||||
в алфавитном |
порядке) |
на д о р о ж к у |
второго |
уровня, т. е. |
|||||||||
фрагмент Е на д о р о ж к е Ті2 помещается |
в виде |
последне |
|||||||||||
го фрагмента |
на д о р о ж к у |
второго уровня |
Tw |
с |
адресной |
||||||||
ссылкой |
Ті2. |
Аналогично |
фрагмент |
CART |
|
дорожки |
|||||||
Гн входит |
в д о р о ж к у Ті0, |
з а в е р ш а я ее (фактор |
ветвления |
||||||||||
второго уровня равен 2) . Последним |
фрагментом |
Тю |
|||||||||||
является Е\ он входит в запись |
первого |
уровня |
|
(хранит |
|||||||||
ся в оперативной памяти) с адресной |
ссылкой Гю. |
|
|||||||||||
Это дерево декодируется аналогично дереву ключе |
|||||||||||||
вых слов |
постоянной |
длины. |
Особенность |
заключается |
|||||||||
в применении |
к последнему |
уровню |
правил |
декодирова |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ло?. |