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

книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах

.pdf
Скачиваний:
5
Добавлен:
25.10.2023
Размер:
13 Mб
Скачать

30 ГЛ. 1. ПОИСК ИНФОРМАЦИИ В ЗУ ЦИФРОВЫХ МАШИН

объекты записаны в памяти в таком порядке, чтобы их адреса представляли собой монотонную функцию от признака, по которому осуществляется поиск. Алгоритм дихотомического поиска в массиве описан в § 1.5.

Множество объектов, организованное в памяти в ви­ де цепочки, не приспособлено для дихотомического по­ иска. Структура же двоичного дерева с двумя адресами связи, исходящими от каждого объекта, весьма удобна

для

организации

дихотомического поиска. Через один

из

этих адресов

связи каждый объект связывается с

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

гой

адрес связи — с группой объектов,

у которых при­

знак

меньше (или по крайней мере не

больше), чем у

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

§ 1.5. Алгоритмы дихотомического поиска в массивах

1.5.1. Дихотомический поиск по совпадению или ин­ тервалу (вариант № 1). Задачей поиска по совпадению или интервалу является выделение из множества фор­ муляров, хранящихся в памяти, подмножества форму­ ляров, удовлетворяющих условию поиска. Если множе­ ство формуляров хранится в памяти в виде упорядочен­ ного массива, то подмножество формуляров, удовлетво­ ряющих условию поиска, представляет собой некоторый подмассив.

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

Выполнение условия поиска эквивалентно одновре­ менному выполнению двух условий:

1. Отклонение от условия поиска не больше нуля. Формуляры, удовлетворяющие этому условию, имеют номера, не превышающие ВГ.

§ .1.5. Д И Х О Т О М И Ч Е С К И Й П О И С К В М А С С И В А Х

31

2. Отклонение от условия поиска не меньше, нуля. Формуляры, удовлетворяющие этому условию, имеют номера, не меньшие, чем НГ.

Блок-схема алгоритма дихотомического поиска

по

совпадению

или

интервалу

изображена

на

рис.

1.7.

Программа состоит из двух участков:

 

 

 

участка

поиска

ВГ

путем

проверки

1-го

условия

(блоки

/—7) ;

НГ

 

 

 

 

 

участка

поиска

путем

проверки

2-го

условия

(блоки

813).

 

 

 

 

 

 

32

ГЛ. 1. ПОИСК

ИНФОРМАЦИИ В

ЗУ ЦИФРОВЫХ

МАШИН

Программа

поиска

верхней

границы

подмассива

имеет

циклический

характер, причем

в каждом цикле

корректируются границы зоны поиска

ВГ.

 

Саму зону

поиска

ВГ определим

таким

образом,

чтобы в верхней ее границе отклонение от условия по­

иска было больше нуля, а в нижней

ее

границе — не

больше нуля. Это значит, что формуляр,

расположенный

в верхней границе зоны поиска, не

может

оказаться

верхней

границей

подмассива

и

поэтому лишь

при­

мыкает

к зоне поиска ВГ, но непосредственно

не входит

в нее. Формуляр,

расположенный

в

нижней

границе

зоны поиска, может оказаться

верхней

 

границей

под­

массива и поэтому непосредственно входит в зону поис­

ка

ВГ.

 

ка

После того

как в результате сужения зоны 0 поис­

ВГ оба ее

граничных формуляра окажутся соседни­

ми, т. е. размер зоны поиска сократится до одного формуляра, нижняя граница зоны поиска ВГ окажется совпадающей с отыскиваемой верхней границей подмас­

сива

(ВГ).

По этой причине

удобно

нижнюю

границу

зоны поиска обозначить

ВГ.

 

 

 

 

Блок

J

присваивает

нижней границе зоны

поиска

(ВГ)

и

верхней

границе Ь

исходные

значения,

равные

НГ01

 

и ВГо +

1, где

а

и

ВГо — номера граничных

элементов массива. Тем самым выполняются такие дей­

ствия, как

будто

существуют фиктивные формуляры

с номерами

5 Г 0 +

1 и Я Г 0 — 1, в первом из которых от­

клонение от условия поиска больше нуля, а во втором — не больше нуля. Блок 2 проверяет, не оказались ли формуляры b и ВГ соседними. Если они еще не оказа­ лись соседними, то блок 3 путем целочисленного деле­ ния определяет номер формуляра в середине зоны по­ иска, обозначенный буквой а. Блоки 4, 5, 6 проверяют знак отклонения от условия поиска в середине зоны по­ иска и в зависимости от результатов проверки заменя­ ют верхнюю или нижнюю границу зоны поиска ВГ фор­

муляром с номером а.

Действительно, если в формуляре

с номером а

отклонение от условия поиска больше ну­

ля, то во всех

формулярах с номерами,

превышающими

а, оно в силу

упорядоченности массива

заведомо боль­

ше нуля, и их поэтому

можно исключить из зоны поиска

ВГ. Если в формуляре

с номером а отклонение от уело-

§ 1.5. ДИХОТОМИЧЕСКИЙ ПОИСК В МАССИВАХ

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

Если блок 2 выявит, что формуляры Ь и ВГ сосед­ ние, то проверяется, не совпадает ли нижняя граница зоны поиска с ее исходным значением НГ01 (блок 7). Совпадение означает, что в массиве отсутствуют форму­ ляры, удовлетворяющие условию поиска. Отсутствие совпадения означает, что подмассив формуляров, удов­ летворяющих условию поиска, не является пустым, и верхняя граница подмассива имеет значение ВГ, совпа­ дающее с нижней границей зоны поиска.

2-й участок программы, определяющий НГ, начина­ ется с блока 8, присваивающего исходные значения гра­ ницам зоны поиска НГ'. Верхней границе зоны поиска, которая после сужения зоны поиска до размера, равно­ го одному формуляру, должна совпасть с нижней гра­

ницей подмассива,

присваивается обозначение

НГ.

В исходном состоянии

верхняя граница зоны поиска

НГ

совмещается с верхней границей подмассива, найденной

на 1-м участке программы, т. е. ей присваивается

зна­

чение ВГ.

Нижней границе зоны поиска H Г

(Ь)

при­

сваивается

исходное значение, равное НГо1.

В исход-

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

Блоки 9—13 определяют НГ. Функции, выполняемые

этими блоками, аналогичны

функциям,

выполняемым

блоками 2—6,

определяющими

ВГ.

 

 

Самый факт наличия НГ не нуждается в

проверке,

так как установленное блоком 7 наличие

ВГ

предопре­

деляет наличие и НГ (в частном случае,

НГ может

совпадать с

ВГ).

 

 

 

2 А. А. Папернов, В. Я. Подымов

34

гл.

î. поиск

И Н Ф О Р М А Ц И И В З У Ц И Ф Р О В Ы Х

М А Ш И Н

 

После

того

как

блок 9 установит, что

формуляры

с номерами НГ

и Ъ оказались соседними, т. е.

формуляр

с номером НГ совпадает с нижней границей

подмасси-

ва, работа

программы заканчивается.

 

Определим количество циклов, требуемых для отыс­ кания обеих границ. Если массив содержит п формуля­ ров, то в исходном состоянии имеется п + 1 вариант ре­ зультата поиска ВГ: ею может оказаться любой из п формуляров, и ее может вообще не оказаться. Каждая проверка уменьшает количество возможных вариантов вдвое (с точностью до ближайшего большего или бли­ жайшего меньшего целого числа), и поэтому для того,

чтобы

определить

ВГ,

требуется

выполнить

Ei(log2(tt+l))

циклов

проверки (£і — функция округ­

ления до ближайшего целого числа, не меньшего задан­ ного). Если ВГ оказался формуляр с номером і, то количество возможных исходов поиска НГ равно і. Для того чтобы определить НГ, требуется выполнить

£і (log2 і) циклов проверки.

Вхудшем случае, когда ВГ совпадает с п-м форму­ ляром, общее количество циклов проверки при опреде­

лении положения

обеих

границ приблизительно

равно

2 £ i ( l o g 2 n ) . Если

любое

положение верхней

границы

подмассива равновероятно, то среднее количестве цик­

лов проверки

равно

 

 

 

 

log2 (п +

1) +

У log, / =

log2

(n +

1) + log2

(n!). (1.5)

 

 

n

(=1

 

 

n

 

Используя

приближенную

формулу

Стирлинга

[44]

 

 

 

п і ^ і п

/ е у

. у ^

 

(1.6)

нетрудно привести выражение для среднего количества циклов к виду

log, (п +

1) + log, п — log, е + у

п ( 1 +

log, (* л))

«

 

ж

2 log, n — 1,37.

(1.7)

Среднее

количество циклов проверки

мало отличается

от максимального.

 

 

 

§ 1.5. ДИХОТОМИЧЕСКИЙ ПОИСК В МАССИВАХ

35

Рис. 1.8. Блок-схема алгоритма дихотомического поиска по совпа­ дению или интервалу (вариант № 2).

36

Г Л . I . П О И С К И Н Ф О Р М А Ц И И Б З У Ц И Ф Р О В Ы Х М А Ш И Н

1.5.2. Дихотомический поиск по совпадению или ин­ тервалу (вариант № 2). На рис. 1.8 изображена блоксхема еще одного варианта дихотомического поиска по совпадению или интервалу. Программа поиска состоит из трех основных участков:

1)участка поиска какого-либо из формуляров, удов­ летворяющих условию поиска, («попадания в подмассив») (блоки /—8) ;

2)участка поиска ВГ (блоки 9—13);

3)участка поиска НГ (блоки 14—18).

При выполнении 1-го участка

программы в каждом

из выделенных для проверки формуляров

предусматри­

ваются проверки обоих

условий

(см. п.

1.5.1), в сово­

купности эквивалентных

условию

поиска

(блоки 4 и 6).

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

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

ВГ, так и НГ. Поэтому

в зону поиска ВГ он включает­

ся в качестве ее нижней границы, а в зону

поиска НГ —

в качестве ее верхней

границы. Верхняя

граница зоны

поиска ВГ и нижняя граница зоны поиска НГ в исход­ ном состоянии совмещаются соответственно с верхней и нижней границами зоны поиска формуляра, получен­

ными к концу 1-го участка

программы. Как уже пояс­

нялось в п. 1.5.1, оба эти

формуляра

не входят

непо­

средственно в соответствующие

зоны

поиска,

а

лишь

примыкают к ним.

 

 

 

 

 

 

 

 

В программе поиска ВГ блоком 11 проверяется

одно

из условий п. 1.5.1, так как в зоне поиска ВГ

второе

условие заведомо выполняется, а в программе

поиска

НГ

блоком 16 проверяется

другое условие

поиска.

 

2-й и 3-й участки программы циклически

повторяют­

ся

некоторое количество раз,

зависящее

от исходного

размера зон поиска границ. Можно ожидать,

что эти

зоны в среднем

окажутся

малой долей

всего

массива,

и,

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

количество

повторений

2-го и 3-го

участков программы будет небольшим.

§ 1.5. Д И Х О Т О М И Ч Е С К И Й П О И С К В М А С С И В А Х

37

Программа поиска, организованного по блок-схеме рис. 1.8, несколько сложнее программы, выполненной по блок-схеме рис. 1.7. Но в связи с тем, что ряд проверок на 1-м участке программы выпадает, а количество по­ вторений 2-го и 3-го участков программы невелико, производительность программы, выполненной по блоксхеме рис. 1.8, в среднем несколько выше, чем програм­ мы, выполненной по блок-схеме рис. 1.7.

1.5.3. Дихотомический поиск по близости. Блок-схе­

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

нет

Выаача bue

Рис. 1.9. Блок-схема алгоритма дихотомического поиска по близости.

границей Ь, в которой отклонение

не

больше

нуля. Ис­

ходными границами зоны поиска

являются

фиктивные

формуляры с номерами НГ0—1

и

ВГ0 + 1.

Сужение

38

Г Л . 1. П О И С К И Н Ф О Р М А Ц И И В З У Ц И Ф Р О В Ы Х М А Ш И Н

зоны

поиска осуществляется блоками 2—6, выполняе­

мыми циклически, так же, как и в программах дихото­ мического поиска по совпадению или интервалу. Коли­ чество возможных исходов поиска по близости в мас­ сиве, содержащем п элементов, равно п, и поэтому ко­

личество циклов проверки равно

E^{\ogin).

 

После того

как

блок 2 обнаружит, что

формуляры

с номерами b

и с

оказались соседними,

выполняется

анализ этих двух формуляров. Содержание этого ана­

лиза зависит от того, какое отклонение

минимизирует­

ся при поиске — положительное,

отрицательное

или

аб­

солютное. На блок-схеме рис. 1.9

эти различия

не

от­

ражены.

 

 

 

 

Блок 7 проверяет совпадение нижней границы зоны

поиска с ее исходным значением

НГ0—1.

Совпадение

означает, что все формуляры в массиве имеют отклоне­

ние от условия

поиска,

большее нуля, и поэтому форму­

ляр

с номером

с = НГ0

имеет минимальное положитель­

ное

(и минимальное по

абсолютной величине) отклоне­

ние от условия

поиска.

 

Блок 8 проверяет равенство нулю отклонения от ус­ ловия поиска в формуляре с номером Ъ, не равным ис­ ходному значению НГ01. Равенство нулю означает, что формуляр с номером b имеет минимальное отклоне­

ние от условия поиска, независимо

от

заданного харак­

тера отклонения.

 

%

В случае неравенства нулю отклонения от условия

поиска в формуляре с номером

b

блок 9 проверяет

совпадение верхней границы зоны поиска с ее исходным значением ВГ0 + 1. Совпадение означает, что все фор­ муляры в массиве имеют отрицательное отклонение от

условия поиска, и поэтому формуляр с номером

b = ВГ0

имеет

минимальное

отрицательное (и

минимальное

по абсолютной

 

величине)

отклонение

от

условия

поиска.

 

 

 

 

с

 

 

 

 

Отсутствие

совпадения

с

исходным

значением

ВГ0+\

означает,

что

формуляр

b

имеет

минимальное

отрицательное,

а

формуляр

с — минимальное

положи­

тельное отклонение. Для того чтобы определить форму­ ляр с минимальным отклонением по абсолютной вели­ чине, требуется еще одна проверка (на рис. 1.9 она не показана).

 

§

1.6. ПРИМЕРЫ ПОИСКОВЫХ СИСТЕМ. СЛОВАРИ

âô

§

1.6.

Примеры поисковых систем. Словари

 

Словарем

мы будем

называть список, любой

элемент

которого

представляет

собой некоторую информацию

типа

текста,

связанную

с заголовком. Поиск

в сло­

варе осуществляется по совпадению с заданным заго­ ловком.

1.6.1. Организация словаря в виде многоступенчатого цепного списка. Слово, стоящее в заголовке любого тек­ ста, являющегося элементом словаря, задается в виде цепи составляющих его букв, связанных друг с другом адресами связи.

Буквы, входящие в заголовки, объединяются в списки различных иерархических уровней. В список высшего или первого иерархического уровня входят возможные за­ главные буквы. Те буквы, которые не могут быть заглав­ ными, например Ь и Ъ, естественно, не входят в список 1-го иерархического уровня. Каждая буква, входящая в список 1-го иерархического уровня, является заголовком некоторого списка 2-го иерархического уровня, связан­ ного адресом связи с соответствующей буквой списка 1-го уровня. Каждый список 2-го уровня содержит возмож­ ные вторые буквы слов, сочетающиеся с соответствую­ щей первой буквой. Например, в список 2-го уровня, оза­ главленный буквой Б, не входят буквы Б, В, Г, Ш, Щ и

другие, несовместимые с первой буквой Б.

 

Каждая

буква, входящая в список і-го иерархического

уровня,

связана

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

списком

( і + 1 )-го

уровня

и является заголовком этого

списка.

Для того чтобы

от списка 1-го уровня дойти до

некото­

рого списка

(і+1) - го уровня, нужно пройти через списки

всех уровней, начиная со 2-го и кончая і-м. Буквы, запи­ санные в списках 1-т-і-го уровней, образуют в соответ­

ствующем порядке начальную часть заголовка.

Список

+ 1 ) -го уровня, связанный

с і-й буквой этой

начальной

части, содержит возможные

(і+1 ) - е буквы

этих слов,

сочетающиеся с соответствующим /-буквенным

началь­

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

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