Файл: Белоногов Г.Г. Автоматизированные информационные системы.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.04.2024
Просмотров: 139
Скачиваний: 3
Система разделителей, используемая при такой 'ор ганизации словаря, представлена в табл. 6.1. Строки этой
Т а б л и ц а 6.1
|
Т а бл и ц а |
раздел ит ел ей д л я |
поиска |
в словаре |
|
||
а |
1 |
|
2 |
3 |
. . . |
k — 1 |
k |
M l |
М 2 |
М з |
|
^ a, ?і - 1 |
Mft |
||
б |
M l |
м |
2 |
^бз |
|
М , ft - 1 |
Mft |
в |
м , |
м |
2 |
^ вз |
|
h - 1 |
■ ^rft |
г |
м . |
м |
2 |
м , |
|
М . ft - 1 |
|
д |
м . |
М г |
М з |
|
М . ft - 1 |
M n |
ІО |
м . |
^Э2 |
эз |
Л'э, К - 1 |
Mft |
|||
м |
, |
N |
юг |
N ѵ>г |
|
‘V |
loft |
|
Э |
м |
, |
|
Л'я, fl- 1 |
|
|||
я |
М 2 |
Л'яз |
Mft |
таблицы обозначены буквами русского алфавита, столб цы — числами, выражающими количество букв в слове, а в клетках записаны начальные номера слов для каж дого участка словаря, соответствующего сочетанию при знаков «длина слова» и «код первой буквы». Поиск на участке словаря может производиться последовательным просмотром буквенных кодов слов или способом «деле ния пополам». Попутно по адресам ячеек памяти опре деляются номера просматриваемых слов.
В памяти ЭВМ табл. 6.1 записывается в виде после довательности групп столбцов. Каждая группа столбцов размещается в 32 ячейках (по числу букв в алфавите), а количество столбцов в группе определяется емкостью ячейки памяти. В одной ячейке может быть записано
п=Е[М/г] |
(6.2) |
номеров слов, где М — длина ячейки в двоичных разря дах; г — длина кода номера слова; Е — оператор выделе ния целой части числа.
90
Форма записи разделителей в памяти ЭВМ для слу чая, когда в одной ячейке помещается три номера слова, иллюстрируется табл. 6.2. Обозначения строк и столбцов в этой таблице приведены для наглядности. В действи тельности они нигде не записываются.
Ф орм а |
запаси |
двум |
Э В М |
д л я п = |
3 |
Т а б л и ц а 6.2 |
|||
|
1 |
|
|
ерной т аблицы |
раздел ит ел ей в памяти |
||||
а |
|
|
2 |
|
3 |
|
|
|
|
/ѵа1 |
|
|
N „ |
|
N „ |
|
|
|
|
б |
Mh |
|
|
М г |
|
Ms, |
[■ |
Первый |
участок |
ю |
М о, |
|
|
^ 1 0 2 |
|
/Ѵю з |
|||
|
|
|
|
|
|
||||
я |
N al |
|
|
N„2 |
|
М » |
|
|
|
а |
4 |
|
|
5 |
|
6 |
|
|
|
М * |
|
|
tf.5 |
|
N t . |
|
|
|
|
б |
N t4 |
|
|
N t , |
|
Nto |
|
Второй |
участок |
ю |
^ 10 4 |
|
|
/ Ѵ .0 5 |
|
^Юб |
|
||
|
|
|
|
|
|
||||
я |
К * |
|
|
N " |
|
N*s |
|
|
|
а |
к - - 2 |
|
k — 3 |
k |
|
|
|
||
N a, ft - г |
^ a , ft - |
з |
N tx |
|
|
|
|||
б |
N t, к - 2 |
Ms, h - |
з |
Ntk |
J- |
Последний |
|||
ю |
^ K J .f t - |
2 |
N Ю, к - 3 |
Alraft |
|
участок |
|||
я |
N К,к - 2 |
^ п , ft- 3 |
М л |
|
|
|
91
Процедура выборки из таблицы разделителей началь ного номера слова, соответствующего сочетанию призна ков «длина слова» и «код первой буквы», включает оп ределение участка таблицы разделителей, где этот номер записан, выбор ячейки на участке и выбор нужной пози ции в ячейке.
Участок таблицы разделителей определяется но
формуле |
|
Аа=Е[1— 1/ф і, |
(6.3) |
в которой Ао — адрес ячейки, предшествующей первой
ячейке участка; / — длина слова; |
т — количество букв |
|
в |
алфавите; символы п и Е имеют |
тот же смысл, что и |
в |
формуле (6.2). Адрес ячейки на |
участке определяют, |
прибавляя код первой буквы слова |
к начальному адресу |
А0, а позицию номера слова в ячейке определяют по формуле
Z,= Res [(/—\)Іп]+\, |
(6.4) |
где символ Res обозначает операцию вычисления остатка при делении одного числа на другое. При прямом и об ратном поиске в словаре адрес буквенного кода слова определяется по его номеру с помощью формулы (6.1). Объем таблицы разделителей определяется согласно вы ражению
V= |
Щ/макс* |
|
где V— количество клеток |
в табл. 6.1; от — число |
букв |
в алфавите; /макс — максимальная длина слова. |
Для |
|
т — 32 и /макс = 28 ц= 896. |
Если в одной ячейке памяти |
записывается по три номера слова, то под таблицу раз делителей необходимо отвести около трехсот ячеек. При этом для каждого сочетания признаков «длина слова» и «код первой буквы» отводится место под начальный но мер группы слов независимо от того, имеются ли в дей ствительности в словаре слова, обладающие этими приз наками.
Таким образом, в таблице разделителей, особенно в той ее части, которая откосится к длинным словам, оказывается значительное количество пустых клеток.
Число пустых клеток можно сократить, если двумер ную таблицу разделителей построить только для основ ной массы более коротких слов словаря, а для длинных слов использовать небольшую одномерную таблицу,
92
в которой разделительным признаком служит длина сло;- ва. Полное исключение пустых клеток из таблицы приве
дет к усложнению алгоритма |
поиска по |
словарю и |
|||
к снижению скорости поиска. |
|
|
|
||
Описанный способ организации словаря можно рас |
|||||
сматривать |
в качестве |
частного случая |
г н е з д о в о г о |
||
с п о с о б а |
(см. гл. 5), |
когда |
обращение |
к |
начальным |
адресам участков словаря производится по сверткам ко дов слов (код свертки образуется из кода первой буквы и кода длины слова). Поиск на выделенном участке словаря производится последовательным просмотром буквенных кодов слов.
В ячейках) к которым адресуются по сверткам кодов слов, могут записываться не начальные адреса участков словаря, а начальные адреса групп адресных отсылок к отдельным словам этих участков. После обращения по свертке к группе адресных отсылок поиск в словаре про изводится последовательным сравнением соответствую щих этим отсылкам буквенных кодов слов с буквенным кодом искомого слова. Такой способ представления сло варя позволяет записывать буквенные коды новых слов
впроизвольные ячейки памяти, но он неудобен тем, что
впроцессе включения новых слов здесь требуется раз двигать 'Массив адресных отсылок. Этого можно избе жать, если применить цепной способ поиска (см. гл. 5),
который требует больше места для адресных отсылок, но зато позволяет располагать их в произвольном по рядке. По этому способу в ячейках, к которым обращают ся по сверткам кодов слов, записывается по две адрес ные отсылки. Первая отсылка является адресом буквен ного кода первого слова участка словаря, соответствую щего заданной свертке, а вторая отсылка (код связи) указывает место записи адреса буквенного кода второго слова. Адресные отсылки к буквенным кодам вторых, третьих и т. д. слов всех участков словаря записывают ся в отдельном массиве ячеек памяти. Эти ячейки также содержат по две адресные отсылки. Первая служит ад ресом буквенного кода некоторого п-го слова участка
словаря, а вторая отсылка |
указывает место записи |
(в пределах данного массива |
ячеек) адреса буквенного |
кода (я+1)-го слова участка.
Поиск в словаре ведется среди группы слов, имею щих такой же код свертки, что и искомое слово. При этом адрес буквенного кода первого слова выбирается
93