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

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

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

§ 9.4. ПРЕОБРАЗОВАНИЕ ВНУТРЕННИХ ЦЕПОЧЕК ДЕРЕВА

361

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

ношения

весов, входит

элемент, только что

записанный

в дерево,

то цепочка

не перестраивается.

Перестройка

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

9.4.7. Блок-схема алгоритма с проверкой соотноше­ ния длин (рис. 9.14). В состав каждого управляющего слова, образующего дерево, входит три адреса: Ал, Лпр, Линф и двухразрядный признак s, значения кото­ рого интерпретируются в соответствии с п. 9.4.4.

В процессе поиска по дереву составляется таблица узлов дерева, принадлежащих пути поиска. Номер стро­

ки этой таблицы обозначен

индексом k. В состав

каждой

строки

таблицы

входят

адрес

Адр[&]

управляющего

слова соответствующего узла и признак

T [k], указыва­

ющий,

какой адрес ведет

из соответствующего

узла

дальше

по пути

поиска:

левый

(T[k]=0)

или

правый

(T[k] l). Блоки /—13 алгоритма осуществляют нор­ мальный поиск в дереве и заполнение таблицы узлов.

После записи в дерево нового элемента блоком 10 или 12 осуществляется переход к группе блоков, корректи­ рующих признаки в узлах дерева.

Группа узлов дерева с нулевыми значениями призна­ ков обрабатывается блоками 14—19. В них просматри­ вается таблица узлов в направлении от конца к началу и корректируются признаки в узлах, упомянутых в таблице. После выявления первого узла с ненулевым значением признака осуществляется переход к блоку 20.

Блоки 20—22 определяют, записался ли новый

элемент

на короткую или длинную ветвь узла. В первом

случае

блок 23 фиксирует восстановление симметрии. Во вто­ ром случае блок 24 или 25 определяет тип цепочки, под­ лежащей преобразованию, и осуществляет переход к од­ ному блоку из группы блоков 26—29, непосредственно преобразующих цепочки. Детальное содержание блоков 26—29, выполняющих преобразование цепочек, в блок-

362

ГЛ. 9. МЕТОДЫ ПЕРЕСТРОЙКИ ДВОИЧНЫХ ДЕРЕВЬЕВ

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

/тек-Мбершины

I Ai\[Amr]:~Ami |®

 

нет

 

да

нет

<

Преобра'задание

цепочек'типа:

' ®

<

®

>

>

ч

>

 

 

°5

 

 

 

 

 

 

Конец

 

Рис. 9.14. Блок-схема алгоритма перестройки дерева по

соотноше­

нию

длин.

 

 

 

мой так же, как и в случае алгоритма с проверкой соот­ ношения весов, и корректировке признаков s в этих же узлах, выполняемой по правилам, описанным в п. 9.4.4.

ГЛАВА 10

ВОПРОСЫ СОВМЕСТНОЙ ОПТИМИЗАЦИИ ПРОЦЕССОВ ПОИСКА И УПОРЯДОЧЕНИЯ

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

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

§ 10.1. Организация поиска и упорядочения в статическом массиве

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

Рассмотрим следующую задачу. Пусть задан случайный массив из п элементов. Известно, что при решении не­ которой задачи потребуется выполнить z запросов на по-

364ГЛ. 10. СОВМЕСТНАЯ ОПТИМИЗАЦИЯ ПОИСКА И УПОРЯДОЧЕНИЯ

иск элементов данного массива. Примем следующую общую организацию информации: весь массив из п элементов разбивается на k подмассивов по n/k элемен­ тов каждый. Все полученные подмассивы полностью упорядочиваются.

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

для метода вставки

 

7= т(т)2(Тір+т");

 

(10л)

для упорядочения слиянием

 

 

 

 

 

Т--^-1оиk г-^(Тср к

 

+ Тп);

 

 

(10.2)

для упорядочения методом Хиббарда и для пораз­

рядного упорядочения

 

 

 

 

 

 

Т f

log,-J- 2 In 2 ( Т с р + - i -

Тп

у

(10.3)

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

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

некратных

шагов

 

 

 

Т- -f

log, JL (Г, +

0,25 Г,) =

f

log, f[-f

г п +

- f - n „ ) .

 

 

 

 

 

 

 

(10.4)

Будем рассматривать задачи поиска по совпадению,

поиска

по близости

и поиска

по

интервалу.

Сложность

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

сивов, для указанных случаев будет составлять:

 

для

поиска

по совпадению и

для поиска

по бли­

зости

 

Т - r c p £ l o g 2

 

(10.5)

 

 

;

 

 

 

k

 

для

поиска

по интервалу (см. п. 1.5.2)

 

т=т.С9.±.ш,±.

( ] 0 - 6 )

§ 10..1. СТАТИЧЕСКИЙ МАССИВ

365

Общее время упорядочения и поиска по z запросам для указанных ситуаций можно записать в виде

Т'ы*=

^(Т,Р

+ Тп)(^)2к

+ (гк,\оё^)Тс,

 

(10.7)

для метода вставки, а

для

других методов — в

виде

 

Т"общ

Т о п l o

g 2 - j

+Tcpazklog2

y ,

(10.8)

где

j 1 при поиске по совпадению или по близости; \ 3/2 при поиске по интервалу;

Тср

-j- Тп

 

 

при упорядочении слиянием;

21п 2 (

Тср

- + —

Та \

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

То

^

 

3

'

Хиббарда;

5

т

< Літ

 

П Р И упорядочении методом

4

с р

_ г : 4

п

 

Шелла.

Выражения (10.7) и (10.8) имеют минимум по k при фиксированных остальных параметрах. .

Оптимальное число подмассивов должно удовлетво­ рять уравнениям

д

T^SL=

_ -L(Tt?

+ Тп )

• £ + Т с р аг( log, -^- - log2

е ) - О

 

 

 

 

 

 

 

 

(10.9)

 

 

 

 

 

 

 

 

 

ô

Г"

 

 

 

 

 

 

 

 

 

=

ft

log2e +

'

Т с р

p

«z ( log, f - log,* ) =

0.

 

dk

 

 

c

 

 

 

 

 

 

 

 

 

 

 

(10.10)

Полученные уравнения свидетельствуют, что минимуму сложности соответствует некоторое оптимальное значе­ ние отношения n/k = Ѵо п т , равное числу элементов в каждом из упорядоченных подмассивов. Это оптималь­ ное значение V зависит от числа запросов на поиск z, условий поиска и принятого метода упорядочения.

366 ГЛ. 10. СОВМЕСТНАЯ ОПТИМИЗАЦИЯ ПОИСКА И УПОРЯДОЧЕНИЯ

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

 

из (10.9)

имеем

 

 

 

 

'опт

(Гер +

Гп) +

g г ^

Ѵо^ = 0>

( Ш

Л 1

)

а из (10.10) имеем

 

 

 

 

 

 

 

•Ѵ О І І Т Т 0

log2e +

Tc.,<x2rlog2

 

0.

(10.12)

Для этих уравнений

найти

решение

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

Ѵоп

опт

 

 

 

 

 

 

 

 

 

4095

 

 

 

 

 

 

 

 

 

2048

 

 

 

 

 

 

 

 

 

1024

 

 

 

 

 

 

 

 

 

512

 

 

 

 

 

 

 

 

 

256

 

 

 

 

 

 

 

 

 

128

 

 

 

 

 

 

 

 

 

64

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

16

 

 

 

 

 

 

 

 

 

16

32

64

128 25Б 51Z 1024 №8409681321Ш0 32800

 

 

Рис. 10.1. Зависимость оптимального размера подмассива от числа запросов на поиск для различных методов упорядочения.

в явном виде невозможно. Однако они очень просто раз­ решаются относительно z=f(Vonr):

из (10.11)

(Гер + тп)

(10.13)

4 а Г ,

 

ср

 

а из (10.12)

 

То log2 g

(10.14)

logs

На рис. 10.1 приведены графические зависимости, построенные по приведенным формулам. Для одного и

§

10,1. СТАТИЧЕСКИЙ МАССИВ

367

того же числа

запросов на поиск z более

эффективные

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

Для числа запросов, превышающих значения z0, найденные из выражений (10.13) и (10.14) при Ѵопт —n, требуется уже полное упорядочение всего массива. Эти

предельные значения

z0 для указанных выше

методов

упорядочения определяются

формулами

 

г

=

? 1 _ ( Z V + I P ) ,

(10.15)

z

=

-

r

° l o g 2 e .

(10.16)

 

П Р

i o g 2 J L

 

" ' с р

 

 

 

е

 

 

 

10.1.2. Частичное

взаимное

упорядочение

массива.

Рассмотрим другую возможную форму организации ча­ стичного порядка в массиве. Будем считать, что алго­ ритм разделения массива на взаимно упорядоченные подмассивы, описанный в § 5.5, проводит деление не до отдельных взаимно упорядоченных элементов, а лишь до появления взаимно упорядоченных подмассивов, содер­ жащих не более заданного числа h0 элементов. Блоксхема такого алгоритма приведена на рис. 10.2 (срав­ ните его с рис. 5.9 из § 5.5). Будем считать при этом, что каждый из опорных элементов, участвующих в раз­ делении, помечается специальной меткой у, по которой в массиве можно различить границы взаимно упорядочен­ ных частей и определить разделяющее значение при­ знака. Внутреннее упорядочение каждой из частей не производится.

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

доченных массивах. Такой алгоритм был

описан

выше

(§ 1.5). Нетрудно

убедиться, что в случае

применения

данного алгоритма

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

в нем

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

368 ГЛ. 10. СОВМЕСТНАЯ ОПТИМИЗАЦИЯ ПОИСКА И УПОРЯДОЧЕНИЯ

то

все три элемента будут упорядочены в заданном от­

ношении. В нашем случае частичного

порядка в масси­

ве

также будут найдены два элемента

с указанными

I Начало

j- = /

к.=/=Н1 •

Разделение

к,1,т

b[j,2]:=m-f

k:-b[j-l, 1}

b[J,2]: = l

l--=b[j-U2]

 

J:'j-'

 

к:=т+1

 

m-/

 

 

Конец

Рис. 10.2. Блок-схема алгоритма частичного взаимного упорядочения массива.

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

§ 10,1. СТАТИЧЕСКИЙ МАССИВ

369

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

Определим сложность частичного упорядочения и по­ иска в данной системе. Практически, дословно повторяя рассуждения п. 5.6.1, получим, что сложность разделе­ ния должна удовлетворять тому же самому рекуррент­ ному соотношению (5.28), но уже с другим начальным условием. Действительно, в нашем случае подмассивы размером h0 дальнейшему делению уже не подлежат, и поэтому T(ho) —0.

Из (5.35) имеем

Т(п) = -Л±^Т{п~к)

+

п + 1 k

+ 2 ( п + 1 ) Г ,(п2-!--2 — 1) (п + 1 —t)

,

п +

1т

у ,

 

 

2rc + 5 - 2 t

(10.17)

 

^

3

 

"Z

(п-

2 — і) (га +

1 і)

 

и при k = n—hQ

получаем

(га +

 

Т(п) = 2 (л + 1 )

7 с р

У

-

(n +

 

^

1

- 0

+

 

 

ß

 

2 - i) (га +

 

 

+ 1±±ТЯ

У

 

(n +

Ш + 5-2І

1 i)

 

'

3

 

^

 

2

— i) (га +

v

 

 

 

 

 

 

 

 

 

 

370ГЛ. ,10. СОВМЕСТНАЯ ОПТИМИЗАЦИЯ ПОИСКА И УПОРЯДОЧЕНИЯ

что после соответствующих упрощений дает

 

 

7 »

Ä

( Г с р + ^ - T n ] 2 1 n 2 n l o g 2 ^ -

.

(10.19)

Сложность

поиска будет определяться

сложностью

дихотомического

деления, равной Гс р log2ft,

и

перебора

в пределах одной

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

массива

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

ного

подмассива

любой из частей, размерами в 0,

1, 2, ...

п0

элементов

происходит с равной вероятностью. От­

сюда следует, что в окончательном частично

упорядочен­

ном массиве подмассивы

любых из перечисленных выше

 

 

 

 

 

 

1

размеров встречаются с равной вероятностью

+ 1) '

Среднее

число элементов

в каждой части

определяется

поэтому

выражением

 

 

 

 

 

 

i ü ^ T "

 

( 1 0 - 2 0 )

 

 

 

 

1=0

 

й с р + 2

На втором этапе поиска необходимо провести

сравнения (с учетом анализа граничных элементов для каждой части). Общая сложность поиска одного элемен­

та

равна

 

 

 

 

 

 

 

 

Г„о„ск = Т с р

( log, л

+

 

2 ( 1 0 .

2 1 )

 

 

 

 

 

 

 

2

 

 

Общая сложность частичного упорядочения и поиска

по z запросам

 

 

 

 

 

 

 

Т06Ш

= 2 ( Т с р + - і - Т„ jIn 2 n log2

j

 

- +

 

 

+

zT

cp

( l o g

2

n + 2 + - ^ )

(10.22)

 

 

 

 

 

h

 

2

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