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

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

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

280 ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ

Д ля того чтобы на каждом этапе слияние с M1 входных лент было осуществимо, нужно, чтобы распре­ деление (5? ) м и н упорядоченных участков с наиболь­ шими номерами было одинаковым на всех входных лентах.

Обозначим это

распределение в виде(5*) М И І І — р а з ­

рядного двоичного

кода, в котором 1 означает прямое упо­

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

деление,

характеризуемое

(Sk ) м и н

разрядным

двоич­

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

(по­

следний

разряд становится

первым,

а первый — послед­

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

(0 заменен

1,

а 1

заменена

0).

 

 

 

 

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

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

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

итоговой.

Из рассмотрения таблицы количества упорядоченных участков на всех лентах для случая, когда «разделе-

§ 7.5. ОДНА ВЫХОДНАЯ ЛЕНТА

281

ние» на всех этапах осуществляется полностью, нетруд­ но заключить, что

1) в начале того этапа, в котором выходной лентой

является

итоговая лента,

количество

упорядоченных

участков

на всех входных лентах нечетно

(в частности,

в начале

последнего этапа на всех входных лентах

имеется по одному упорядоченному участку) ;

2) в начале того этапа, в котором выходной лентой

является

не

итоговая

лента,

количество

упорядоченных

участков

на

итоговой

ленте

нечетно, а на всех других

лентах —четно (в том числе и на выходной ленте с ну­ левым количеством упорядоченных участков).

Из 1) и 2) вытекает, что на всех этапах направление упорядочения участков с первыми номерами на итоговой ленте является прямым, а на всех остальных лентах обратным. Отсюда однозначно вытекает способ форми­ рования начальных участков.

Блок-схема блока формирования начальных участков изображена на рис. 7.6. Блоки 25 и 26 формируют для каждой ленты начальное значение признака D, опреде­ ляющего направление упорядочения первого из началь­

ных участков.

Для і-й ленты, которая

должна

стать

итоговой,

D=l,

а

для других

лент 0 = 0.

Блок

30 при

переходе

от одного

оператора

формирования к другому,

изменяет значение признака D.

На рис. 7.7 изображен блок операторов слияния. Бло­ ки 34—36 выполняют 1-й подэтап 1-го этапа процедуры упорядочения по данным, подготовленным блоком моде­ лирования, блоки 37—39 — выполняют 2-й подэтап 1-го этапа процедуры. Все остальные этапы слияния выпол­ няются блоками 40—54. Количество операторов слияния, выполняемых на каждом этапе, фиксируется перемен­ ной с. В процессе выполнения процедуры слияния, являю­ щейся обращением процедуры моделирования, чередова­ ние выходных лент тоже является обратным, т. е. следу­ ет в порядке уменьшения номеров лент с переходом от 1-й ленты к М-й. Блок 46 позволяет в соответствующий момент установить, что количество требуемых операторов слияния равно нулю, т. е. процедура упорядочения за­ кончена. Блок 50 для каждого этапа формирует список входных лент, а операторы 53 и 54 непосредственно осу­ ществляют слияние.

282 ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ

Рис. 7.6. Блок-схема алгоритма упорядочения с одной выходной лентой (формирование начальных участков).

 

I

§ 7.5. ОДНА ВЫХОДНАЯ ЛЕНТА

283

Рис. 7.7. Блок-схема алгоритма упорядочения с одной выходной лентой (операторы слияния).

284 ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ

§ 7.6. Оценка сложности процедуры упорядочения

с одной выходной лентой

Пусть на /-м этапе процедуры на выходную ленту записывается SJ упорядоченных участков длиной

В этом случае сложность /-го этапа равна SJ lj . Сум­ марная сложность всех этапов слияния равна

где k — количество этапов слияния, а вместе с этапом формирования начальных участков

T = 2S'lj

+ lk,

(7.14)

/=і

 

 

где / £— длина всего массива,

равная длине

упорядочен­

ного участка, записываемого на выходную ленту в k-u

этапе.

 

 

 

 

 

 

 

 

 

Длина участка lj

равна сумме

длин

участков,

запи­

санных в /-м этапе на всех входных лентах.

На

M 1

входную ленту

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

участки

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

записывались в

предыдущих

М—1 этапах

процедуры

или, если этапов было меньше чем M

1,

то

частично

при формировании

начальных

участков.

В

последнем

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

длины объем ОЗУ) равны единице.

 

 

 

 

 

Если мы запишем ряд чисел, состоящий из M

 

1 еди­

ниц, дополненный рядом длин

I j

, записываемых

на вы­

ходную ленту в последовательных

этапах,

 

 

 

 

1, 1, . . . , 1 Л ,

/ 2 , - Л ,

 

 

 

 

(7.15)

 

M—1 единиц

 

 

 

 

 

 

 

то любой член этого ряда, начиная с М-то, будет

равен

сумме M1 предыдущих членов.

 

 

 

 

 

 

Количество упорядоченных участков SJ , записывае­ мых в /-м этапе на выходную ленту, полностью считывается с нее за M—1 последующих этапов, так как через M1 последующих этапов эта же лента снова становит­ ся выходной.

§ 7.6. СЛОЖНОСТЬ ПРОЦЕДУРЫ С ОДНОЙ ЛЕНТОЙ

285

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

Af—1

(7.16)

V S/+6.

8=1

 

Для того чтобы распространить эту зависимость на все S y , начиная от 5* и кончая S1 , запишем ряд чисел

(7.17)

В этом ряде, так же как и в (7.15), каждый член, начиная с УИ-го, равен сумме M—1 предыдущих членов.

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

Для заданного количества лент M и количества эта­ пов k непосредственное вычисление членов ряда Фибо­

наччи позволяет определить

все / < и S; '

и сложность по

формуле

(7.14). Например,

для М — 6 и & = 9 ряд

(7.15)

имеет вид:

/І = 5, /2

 

 

 

 

 

 

 

 

 

1,1,1,1,1,

= 9,

/ а = 17, /4 = 33,

/5 =

65,

/ 6 =129,

/7 = 253,

/8

= 497, /9 = 977,

 

 

 

 

 

 

 

 

а ряд (7.17) —

 

 

 

 

 

 

 

 

 

0,0,0,0, 5*

= S 9 = 1 ,

S 8 = l , 5 7 = 2, S6

=

4,S5 = 8,S4 =16,

53 = 31, S2

= 61, S'=120.

 

 

 

 

 

 

 

 

Суммарная

сложность

всех

этапов

слияния

равна

120x5+61 X 9 + 3 1 X 1 7 + 1 6 х З З + 8 х 65+4 X 129+

 

+ 2 x 2 5 3 + 1 x 4 9 7 + 1x977=600+549+527+528

+

520+

 

 

 

 

 

 

+516+506+497 + 977 = 5220.

Сложность с учетом

этапа

формирования

начальных

групп равна 5220+977 = 6197. Заметим,

что в случае ис­

пользования метода с несколькими выходными

лентами

(§ 7.3)

с распараллеливанием

на три входные ленты мы

получили

бы семь этапов слияния с общей

сложностью,

равной 977X8 = 7816, а в случае использования

метода с

чередованием

операторов

 

формирования

и

слияния

(§ 7.4)

с

распараллеливанием

на 4

входные

ленты —

5 этапов

с общей сложностью,

равной

977X6 = 5862.

286

ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ

 

Рассмотрим некоторые способы приближенной оцен­

ки

рассматриваемой процедуры. Для этого используем

то

обстоятельство, что в ряде Фибоначчи г-го ранга

член a j (i>r) равен

,/ - 2

aj ^ 2

а & = аІ~1

+

2

ü b ~

аІ-г-1

8=/—г

 

' 8=/—/•—1

 

 

 

 

 

 

= 2 а / _ і — а ; _ г _ і . (7.18)

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

отношение

двух последовательных

членов

 

 

 

 

 

 

 

 

 

= 2-

aj—r—\

 

 

 

"7—1

"7—1

 

 

 

 

несколько меньше 2. Учитывая это соотношение, можно принять, что

а}-г-\1а,--1 - = 2~г

и

ау /а/_і = 2 — 2-'.

(7.19)

Примем это отношение справедливым для всех чле­ нов, начиная с (г+1) -го, хотя оно фактически начинает выполняться с достаточной точностью для членов ряда Фибоначчи с большими номерами. Длина упорядоченной последовательности /у после выполнения 1-го этапа слияния окажется равной M—1, а после каждого после­ дующего этапа— (М~\) • (22-(м-і))/-і у Г Д е у номер этапа. Следовательно, количество этапов

k = E1 ( l o g 2 _ 2 - ( M - »

j + l .

(7.20)

В нашем случае

1 у

У

1 \ Jog (2 - 2-5) j

s=2-—2 2"0 5 ; г

Сложность этапа формирования начальных групп и первого этапа слияния одинакова и равна N. Сложность

2-го этапа слияния равна -— щ_Х) , так как в нем уча­ ствует одна упорядоченная группа, длина которой мень­ ше длины всего массива в 2 — 2~ < м - 1 ) раз. Сложность всех остальных этапов примем равной сложности 2-го

§ 7.7. УПОРЯДОЧЕНИЕ НА ОДНОЙ ЛЕНТЕ

287

этапа, так как количество упорядоченных групп увеличи­ вается при переходе от /-го этапа к (/—1)-му в 2—2~( м - 1 > раза, а длина упорядоченной группы уменьшается в том же отношении. Следовательно, общая сложность равна

(7.21)

В нашем случае оценка сложности окажется равной

977 - 2 +

= 5924,

что ниже точного значения сложности на 4%-

§ 7.7. Упорядочение на одной ленте

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

Вэтом случае основной объем ОЗУ (исключая рабо­ чие ячейки) делится на две равные части и обмен между лентой и ОЗУ осуществляется зонами, равными по раз­ меру половине ОЗУ.

Алгоритм внешнего упорядочения, аналогичный по своей идее алгоритму вставки в ОЗУ, выполняется по блок-схеме, изображенной на рис. 7.8.

Вэтой блок-схеме используются следующие опера­

торы:

МЛП -»-ОЗУ(1) ) —' оператор считывания с магнит-

МЛП->- ОЗУ(2) j ной ленты соответственно в 1-ю (нижнюю) и 2-ю (верхнюю) зоны ОЗУ при движении ленты в прямом направлении;

МЛО-*-ОЗУ(1) I т о же, но при движении ленты МЛО-»-ОЗУ(2) j в обратном направлении;

ОЗУ(1)-*-МЛ ) оператор записи на магнитную ОЗУ (2) -*-МЛ / ленту соответственно из 1-й и 2-й половин ОЗУ, выполняемый только при движении ленты

впрямом направлении;

П(k) —оператор перемотки ленты на k зон в обрат­ ном направлении;

ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ

 

 

i:-jl:

= 0

®

 

млп-озу(г)

 

 

 

 

• Конец

 

МЛП-ОЗУ(І)

YS)

 

X

^

\—L

 

Ожиаание

нетУ^ Упор

 

 

Ожидание

закончен

 

 

 

 

I

МЛЛ^ОЗУ(І)

 

 

 

I

 

I

/7 (!)

I УПОР г®

Ожидание

 

 

 

Ожидание

nftj; /••=/-/

^

да

 

 

мло-^озу(г)

Упор

озУ(г)-*т

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

§ 7.7. УПОРЯДОЧЕНИЕ НА ОДНОЙ ЛЕНТЕ

289

Упор — оператор внутреннего упорядочения

содержи­

мого ОЗУ.

 

Кроме того, приняты обозначения:

 

/7— нижняя граница упорядочиваемой зоны на маг­ нитной ленте, равная меньшему из номеров зон, куда еще предстоит запись упорядоченного участка;

]2— верхняя граница упорядочиваемой зоны на маг­ нитной ленте;

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

ницы /7 и ]2 перемещаются навстречу

друг

другу;

і — текущий

номер считываемой

или

записываемой

зоны магнитной

ленты.

 

 

Блок / присваивает индексам начальные значения й вводит в верхнюю половину ОЗУ начальную зону с ленты.

Блоки 4—12 осуществляют запись в ОЗУ одной зоны данных с ленты, движущейся в прямом направлении, упо­ рядочение двух зон в ОЗУ в единый упорядоченный уча­ сток и запись младшего из упорядоченных участков на магнитную ленту вместо считанного участка. Для этого запись и считывание отделяются друг от друга операто­ ром перемотки на одну зону. Перемотка ленты и внут­ реннее упорядочение в ОЗУ выполняются параллельно. Оператор записи на ленту может выполняться только после завершения обоих параллельных процессов. Блоки 13—20 осуществляют запись в верхнюю зону ленты стар­ шего из упорядоченных участков. Ввиду того, что его раз­ мещение является окончательным, верхняя граница J2 сме­ щается на единицу вниз. Блоки 22—24 выполняют запись в ОЗУ зоны данных при перемещении ленты в обратном направлении, упорядочение в ОЗУ двух зон и запись старшего из упорядоченных участков на ленту вместо считанного участка. Ввиду того, что считывание и запись выполняются при движении ленты в разных направлени­ ях, их не разделяет оператор перемотки. Перемотка вы­ полняется после записи перед считыванием следующей зоны. Блоки 25, 26 осуществляют запись в нижнюю зону ленты (из еще неупорядоченного ее участка) младшего из упорядоченных участков с переходом к корректиров­ ке нижней границы.

Как при движении ленты в прямом, так и при дви­ жении в обратном направлении каждая зона проходится

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

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