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

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

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

по ГЛ. 3. МЕТОДЫ слияния

Наиболее проста организация процедуры при исполь­ зовании двойного резерва памяти. В этом случае выде­ ляют два поля позиций равного объема (по п позиций каждое), на одном из которых размещается исходный случайный массив. Без ограничения общности будем счи­ тать, что есть некоторое общее поле позиций М, на ко­ тором, начиная с позиции А и кончая позицией А-\~п1, располагается исходный случайный массив, а последо­ вательность позиций, начинающаяся с позиции В и за­

канчивающаяся позицией В-\-п1, представляет

резерв­

ное поле, используемое в процессе упорядочения.

Общая

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

описанному

выше. Этот

оператор

в дальнейшем будет

обозначаться

в виде

 

 

 

 

 

Сл(іа,паь,пьс),

 

(3.32)

где іа — индекс начальной позиции

первого

исходного

подмассива

в

поле M;

п а— объем

первого

исходного

подмассива; іь — индекс начальной позиции второго ис­

ходного

подмассива

в поле

М;

пь — объем

второго

ис­

ходного

подмассива;

іс—индекс

начальной

позиции

ре­

зультирующего подмассива в

М.

 

 

 

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

Как уже отмечалось, на самом первом этапе необ­

ходимо организовать упорядоченные

пары

элементов.

Эти пары лучше получать не обычным

для

процедуры

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

§ 3.4. УПОРЯДОЧЕНИЕ МАССИВА

111

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

На первом этапе происходит образование упорядо­ ченных пар объектов путем обмена через некоторую сво­ бодную позицию а. На последующих этапах (начиная с блока 6) происходит последовательное объединение упо­ рядоченных подмассивов до образования общего упо­ рядоченного массива. На каждом этапе проводится слия­ ние равных подмассивов (объемом в k элементов), за исключением, может быть, лишь одного остаточного под­ массива (п может не быть кратно k). В процедуру вве­ дена булевская переменная z, принимающая значение true, если после окончания процедуры упорядоченный массив расположен на поле с начальной позицией ß, и

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

на поле

с начальной позицией А.

Введение булевской

перемен­

ной 2 необходимо

только

в том

случае, когда

объем

массива п является

изменяемым

параметром процедуры

и заранее неизвестно, за сколько этапов произойдет пол­ ное упорядочение. Если же п фиксировано, то оконча­ тельное положение упорядоченного массива можно опре­ делить заранее и не вводить специальную переменную.

Блок-схема данной процедуры приведена на рис. 3.9. В блоках /, 2, 3, 4, 5 в цикле по номеру позиции исход­ ного случайного массива і происходит образование упо­ рядоченных пар элементов. Блок / задает начальное значение индексу і, параметру k и величине z, в блоке 2 производится проверка упорядоченности пар соседних элементов, а в блоке 3 производится их обмен при об­ наружении инверсии. Блок 4 осуществляет изменение

112

ГЛ. 3. МЕТОДЫ слияния

индекса і и блок 5 определяет конец цикла образования упорядоченных пар. Затем в цикле по переменной k про­ изводится последовательное попарное объединение

к-

'false

За

\нет

+2

да

[нет

к

Конец

u[y+2(j-1)k&y+(2j-1)k,k,№(j-1)k ] \

1

СС:=М[А+І]

3 ©

М[#+і]:=М[у+і]

/•• = / + /

u\y+Z{j4)k,ky42j-1)Kn<2j-l)kMj-l)k

_ *

Рис. 3.9. Блок-схема процедуры слияния.

подмассивов. Величина k определяет объем сливаемых подмассивов. Изменение k при переходе от этапа к этапу осуществляется блоком 6. Блок 7 производит проверку,

§ 3.4. УПОРЯДОЧЕНИЕ

МАССИВА

113

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

массив (при

k^-n) и не следует ли поэтому

заканчивать процедуру.

Блоки 8, 9 и 10 выполняют настройку внутренней про­

цедуры слияния двух

упорядоченных подмассивов. Если

2 = false, то сливаются

подмассивы, находящиеся на поле

с начальной позицией

у—А,

а результат помещается на

поле с начальной позицией

б = В. В случае же z = true

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

поле с начальной позицией у = В, а результат

помещают

на поле с начальной позицией ô = А. Индекс

/ определя­

ет номер сливаемой пары подмассивов. Блок

/ / присва­

ивает / начальное значение. Блоки 12 и 13

определяют

условия слияния. Если оба сливаемых подмассива теку­ щей пары / полные (т. е. содержат по k элементов каж­ дый), то должно выполняться условие 2kj^C п. Действи­ тельно, все подмассивы, подлежащие слиянию на данном этапе, имеют начальные позиции, соответствующие сле­ дующей последовательности индексов:

Ъ Т + k, Т ' + ' 2 k, т

Y + ( 2 7 К 2 ) ' * , т + (2 / - \ ) \ . . .

 

(3.33)

(слиянию подвергаются соседние подмассивы), а началь­ ные позиции результирующих подмассивов соответству­ ют следующей последовательности:

8,8 + 2 0 + 46,..., 8 + (2/ — 2)6,... (3.34)

Нетрудно убедиться, что при

выполнении условия 2kj

п

конечный индекс второго из

сливаемых подмассивов

не

выйдет за пределы всего массива, а это гарантирует пол­ ный объем в k элементов для обоих подмассивов. В этом случае в процедуре далее выполняется оператор слия­

ния с

указанными ниже

параметрами (блок 14)

Сл

+

( 2 / — 2) k, k,T

+

(2j—

\)k, k,b+

(2/ — 2) k].

 

 

 

 

 

 

(3.35)

После

его

выполнения

блок 19

изменяет

номер пары

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

яния.

' '•'•••

В случае, когда

условие 2kj < п не выполнено, т. е. в

массиве не осталось пары полных подмассивов, требую­

щих

слияния, проводится

дополнительная

проверка

(блок

13), определяющая,

остался ли один

подмассив,

114

ГЛ. 3.

МЕТОДЫ слияния

или один полный

и

один неполный подмассив. Если

(2/—l)k<n, то в остатке содержится один полный под­ массив и один неполный. В этом случае необходимо про­ вести слияние с учетом неполноты второго из подмасси­

вов. Это осуществляет блок

15, являющийся оператором

слияния двух подмассивов с указанными

ниже парамет­

рами

 

 

Сл[Т + (2/ —2)£, k, т +

(2/—

n-{2j-\)k,

Ъ + (2 / — 2) Щ.

(3.36)

После завершения этого последнего слияния необходимо

изменить

значение булевской переменной z и перейти

к новому

этапу процедуры (к блоку 6). В случае, когда

условие

(2/—\)k<n не выполнено, т. е. в остатке обра­

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

дится

пересылка этого

подмассива в

результирующий

массив

(блоки 16, 17

и 18),

после чего

обычным обра­

зом осуществляется переход к новому этапу.

Оценим

сложность

всей процедуры

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

случайного

массива

в

предположении,

что сложность

вычисления

адресов

равна

Тд, обмен производится за

три пересылки и вероятность инверсии объектов в слу­ чайном массиве р = 0,5.

В этом случае сложность первого этапа

Тх = - J (2 Г А + 3 р Тп + Тп + 2 Г , + 2 Г и ) . (3.37)

Сложность каждого следующего этапа, производящего слияние nl2k пар подмассивов, по k объектов в каждом,

Т2 = • 2k(2TA + Тп + 3 7 и + Г 5 Л + Т% ). (3.38)

При этом не учитываются служебные операции на каж­ дом из этапов (изменение индексов /, k, проверки конца циклов по / и k), а также изменение сложности из-за пе­ ресылок непарных остаточных подмассивов и неточность значения сложности, описываемой формулой (3.18) при малых k. Все перечисленные факторы не являются пер­ востепенными и учет их привел бы к неоправданному усложнению расчетов.

Так как процедура продолжается до тех пор, пока число элементов в результирующем подмассиве не до-

§ 3.4. УПОРЯДОЧЕНИЕ МАССИВА

115

стигнет п, т. е. выполнится отношение k = 2^>i п, то, об­ щая сложность процедуры будет определяться выраже­ нием

Тсл

= п (ТА

+ - і - Тп

- h Тн

+ Т%

I- - і - Г „ ) +

 

 

 

.

+

( l o g 2

n )

 

7 п f з

^

+ Г^ - Ь Г , ) .

(3.39)

 

V

л(2 7\ +

 

 

 

 

<?=2

 

 

 

 

 

 

 

 

Заметим, что

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<?макс = ^ i ( l 0 g t n ) ,

 

(3.40)

где

£ і (А)—ближайшее

к А целое

число, не

меньшее,

чем А.

Поэтому

 

 

 

 

 

 

 

 

 

 

 

 

 

7'CJI =

; i { 7 ' 0 £ 1 ( l o g ï / z ) - A 7 , } f

 

(3.41)

где

Г 0 =

2 Г А

+

7-п + З Т И

+ Г „

+

Г, , а

= ТА

+

+ — Тп

+

2 Т и

+ —^sic—'экономия

времени

обработки

од­

ного элемента на первом этапе. Эффективность всей про­ цедуры

З с л = — •

-

.

(3.42)

4 {ГоЯі (log, n) -

Д Т)

Ѵ

По такому же принципу можно построить процедуру слияния, производящую на каждом из этапов объедине­ ние k подмассивов и использующую также двойной ре­ зерв памяти. В этом случае вся процедура упорядочения исходного случайного массива будет состоять из £ і (logera) этапов, на каждом из которых будет-проходить слияние отдельных подмассивов, содержащих по t объ­ ектов, в подмаосивы, содержащие уже по M объектов, с соответствующим сокращением общего числа подмасси­ вов (с n/t до n/kt). Общая сложность процедуры в этом случае определится выражением (см. (3.27))

T = n(Ta + (k-l)Ts)

Ех (log, n).

(3.43)

Результирующая эффективность процедуры

5 =

.

(3.44)

4 э + (ft - 1) Ts) £ i (log* n)

116

ГЛ.

3.

МЕТОДЫ

слияния

 

Обозначим X = T J T S

и рассмотрим

выражение

 

Q

Л

 

 

П \0gn

k

 

 

4Ts(k—l+i)

log* n

4 Ts{k

-

1 +

 

 

 

 

 

n

In k

(3.45)

 

 

 

 

4Ts\nn

k— 1

 

 

 

 

+ х '

Обозначим

также

 

 

 

 

 

 

= 4 Ts In «

In k

 

 

n In 2

(3.46)

— 1 + X

 

8 Го In и

Тогда выражение для относительной эффективности про­ цедуры примет вид

 

 

Э

_ 2

lnfe

(3.47)

 

 

Э0

~~ 1п2 ' А — 1

 

 

+ х '

Эта

величина

для каждого значения т имеет максимум

по

k. Зависимость относительной

эффективности от k

 

t=1

 

 

 

 

 

1,0

l,5

 

 

 

 

t =

 

 

 

 

t=2

 

 

 

 

 

0,8

 

 

 

 

 

 

t=3

 

 

 

 

0,6

t = 5

 

 

 

 

 

 

 

 

 

0,4

t=W

 

 

 

ол.

о

i

J

I

1—

j

I

I

i _

 

2 3 4 5

Б

7

8 9 10

 

11 12

13

14 15 16 к

Рис. 3.10. Характеристика изменения относительной эффективности процедуры слияния в зависимости от числа объединяемых подмас­ сивов k.

при х = 1 ; 1,5;

2; 3; 5 и 10 приведена

на рис. ЗЛО. Из

этого рисунка

следует, что в широком

диапазоне значе-

§ 3.4. УПОРЯДОЧЕНИЕ МАССИВА

117

ний % эффективность процедуры существенно повышает­ ся при переходе от й = 2 к k = 3 и при дальнейшем уве­ личении величины k.

Определим оптимальные соотношения между т и k. Для этого приравняем нулю производную по k от отно­

сительной

эффективности:

 

 

 

 

 

In ft

(ft — 1 + x)

In ft

 

 

 

ft

 

= 0.

oft Un 2

ft — 1 + т

 

 

(ft — 1 + x ) In 2

 

 

 

 

 

 

(3.48)

Отсюда

 

 

 

 

 

 

k 1 +

x =

k\nk

 

(3.49)

 

і о ш = k(lnk

1) + 1.

 

(3.50)

Зависимость т о п т от k 'приведена на рис. 3.11. Процедура, использующая слияние двух подмассивов, наиболее эф­ фективна при значении т = 0,38, т. е. когда время срав­ нения признаков сравнительно велико. Оптимальные зна­ чения т для различных k приведены в таблице.

т опт

0,38

1,30

2,56

5,75

9,7

к

2

3

4

6

8

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

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

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

118 ГЛ. 3. МЕТОДЫ слияния

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

чения

объект

должен

поступить

в

сверхоперативную

 

 

 

 

 

память

и

должен

быть

 

 

 

 

 

отослан

в

основное

запо­

 

 

 

 

 

минающее

 

устройство.

 

 

 

 

 

Поэтому

 

общее

число

 

 

 

 

 

обращений

к

основному

 

 

 

 

 

ЗУ

будет

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

 

 

 

 

 

произведением

числа

 

объ­

 

 

 

 

 

ектов

в

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

 

 

 

 

 

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

 

 

 

 

 

процедуре

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

 

 

 

 

 

Выбором процедуры

мож­

 

 

 

 

 

но

изменить лишь

число

 

 

 

 

 

этапов.

Наибольшей

эф­

 

 

 

 

 

фективности

процедура

 

 

 

 

 

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

достигнет в

 

 

 

 

 

том случае, когда в буфер­

 

 

 

 

 

ное

ЗУ

будут

поступать

Рис. 3.11. Характеристики

зависи­

очередные

сравниваемые

объекты

от

максимально­

мости

оптимального

отношения

го

числа

подмассивов.

т =T9/TS

от числа

объединяемых

 

подмассивов

k.

 

Число

сравниваемых

 

объ­

 

 

 

 

 

ектов

 

 

ограничивается

лишь

размером

буферного

запоминающего

устройства,

и чем

больше

элементов будет

сравниваться, тем

за

меньшее число

этапов

будет

выполняться

процедура.

§ 3.5. Процедуры упорядочения слиянием

при ограничении резерва памяти

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

§ 3.5. ОГРАНИЧЕНИЯ РЕЗЕРВА ПАМЯТИ

119

единения отдельных элементов в пары, то число элемен­

тов

в сливаемых массивах

за

k этапов

увеличивается

до

2к.

 

 

 

 

 

 

 

 

Пусть нам

задано число

объектов

в

исходном

мас­

сиве п.

 

 

 

 

 

 

 

 

Определим

минимально

необходимый

резерв

памя­

ти

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

массива

в

предположе­

нии, что на каждом этапе слияния

число

объектов в

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

подмассиве

удваивается

 

 

 

 

Для любого п найдется такое k, что

 

 

 

 

 

2*-1 <

п <

2*.

 

 

 

(3.51)

Рассмотрим два случая:

 

 

 

 

 

 

 

 

1) 2*-1 <

n < 3 - 2 f e - 2 ,

 

 

(3.52)

 

 

2) 3 - 2 f t - 2

< n < 2 * .

 

 

 

(3.53)

В первом случае после выполнения

k — 2 этапов

слия­

ния образуется

два полных

подмассива, по 2Л~2

объек­

тов в каждом,

и один неполный. Для

последовательного

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

объемом в

2к~2

позиций.

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

для слияния

двух полных подмассивов

требуется

как

минимум

2к~2

свободных

позиций, а для

слияния

объединенного

под­

массива с неполным также достаточно резерва в 2ft~"2 позиции.

Очевидно, что этого резерва достаточно и для всех предшествующих этапов.

Во втором случае после выполнения k—1 этапа слия­ ния образуется один полный подмассив объемом в 2*— 1

объекта и один

неполный

подмассив

объемом

в

(п—

—2к~1)

< І 2 * — 1 .

В этом случае для окончательного

сли­

яния

этих подмассивов

достаточен

резерв

памяти в

п— 2*— 1

позиций. Очевидно, что этого

резерва

достаточ­

но и для

всех

предшествующих этапов. Итак,

мини­

мально необходимый резерв памяти определяется сле­ дующим образом:

ѵ [

2К-* при

2 * - і < п < 3 . 2 * - ' ,

\п~2*-1

при

3 - 2 * - 2 < n <2*.

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