
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdfпо ГЛ. 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 I©
да
[нет
к
Конец
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 |
||
|
|
|
|
+ х ' |
|||
Обозначим |
также |
|
|
|
|
|
|
5о |
= 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*. |