
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdf§ 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, выполняющих преобразование цепочек, в блок-
ГЛАВА 10
ВОПРОСЫ СОВМЕСТНОЙ ОПТИМИЗАЦИИ ПРОЦЕССОВ ПОИСКА И УПОРЯДОЧЕНИЯ
Данную главу следует рассматривать как пример ис пользования общего (системного) подхода к вопросам поиска и упорядочения при решении некоторых частных задач оптимизации.
Основная цель любого упорядочения — облегчение в дальнейшем поиска необходимой информации. Наибо лее трудоемок поиск в неупорядоченном массиве. Наи более прост — в полностью упорядоченном массиве или в дереве. Однако упорядочение массива и построение дерева сами по себе требуют больших затрат машинно го времени. Если стоит задача минимизации общего времени, затрачиваемого на упорядочение и поиск, то при крайне редких запросах на поиск целесообразным окажется простой перебор, а при очень частых запросах— полное упорядочение или построение дерева, обеспечива ющие наиболее экономичный дихотомический поиск. В промежуточных случаях самым эффективным должно быть разумное сочетание дихотомического поиска с про стым перебором при частичном упорядочении исходного массива. В данной главе будут рассмотрены некоторые методы организации информации и поиска, обеспечиваю щие наименьшую суммарную сложность совокупности процедур поиска и упорядочения в фиксированном масси ве, а также в массиве с переменным составом элементов.
§ 10.1. Организация поиска и упорядочения в статическом массиве
10.1.1. Частичное внутреннее упорядочение массива.
Рассмотрим следующую задачу. Пусть задан случайный массив из п элементов. Известно, что при решении не которой задачи потребуется выполнить z запросов на по-
§ 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 |
е ) - О |
||||
|
dé |
|
|
|
|
|
|
|
(10.9) |
|
|
|
|
|
|
|
|
|
|
ô |
Г" |
|
|
|
|
|
|
|
|
|
= |
— |
ft |
log2e + |
' |
Т с р |
p |
«z ( log, f - log,* ) = |
0. |
|
dk |
|
|
c |
|
|
|||
|
|
|
|
|
|
|
|
|
(10.10) |
Полученные уравнения свидетельствуют, что минимуму сложности соответствует некоторое оптимальное значе ние отношения n/k = Ѵо п т , равное числу элементов в каждом из упорядоченных подмассивов. Это оптималь ное значение V зависит от числа запросов на поиск z, условий поиска и принятого метода упорядочения.
§ |
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 |
+ |
|
|
1Р |
ß |
|
2 - i) (га + |
|
|
||||
+ 1±±ТЯ |
У |
|
(n + |
Ш + 5-2І |
1 — i) |
|
' |
|||
3 |
|
^ |
|
2 |
— i) (га + |
v |
||||
|
|
|
|
|
|
|
|
|
|