
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdf280 ГЛ. 7. УПОРЯДОЧЕНИЕ ИНФОРМАЦИИ ВО ВНЕШНИХ ЗУ
Д ля того чтобы на каждом этапе слияние с M—1 входных лент было осуществимо, нужно, чтобы распре деление (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 единиц |
|
|
|
|
|
|
|
|
то любой член этого ряда, начиная с М-то, будет |
равен |
||||||||
сумме M—1 предыдущих членов. |
|
|
|
|
|
|
Количество упорядоченных участков SJ , записывае мых в /-м этапе на выходную ленту, полностью считывается с нее за M—1 последующих этапов, так как через M—1 последующих этапов эта же лента снова становит ся выходной.
§ 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, а после каждого после дующего этапа— (М~\) • (2—2-(м-і))/-і у Г Д е у — номер этапа. Следовательно, количество этапов
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 (!) |
1® |
I УПОР г® |
Ожидание |
|
|
|
Ожидание |
nftj; /••=/-/ |
^ |
да |
|
|
мло-^озу(г)
Упор
озУ(г)-*т
Рис. 7.8. Блок-схема алгоритма упорядочения на одной ленте.
§ 7.7. УПОРЯДОЧЕНИЕ НА ОДНОЙ ЛЕНТЕ |
289 |
Упор — оператор внутреннего упорядочения |
содержи |
мого ОЗУ. |
|
Кроме того, приняты обозначения: |
|
/7— нижняя граница упорядочиваемой зоны на маг нитной ленте, равная меньшему из номеров зон, куда еще предстоит запись упорядоченного участка;
]2— верхняя граница упорядочиваемой зоны на маг нитной ленте;
по мере выполнения процедуры упорядочения и запи си в отдельные зоны ленты окончательных данных, гра
ницы /7 и ]2 перемещаются навстречу |
друг |
другу; |
|
і — текущий |
номер считываемой |
или |
записываемой |
зоны магнитной |
ленты. |
|
|
Блок / присваивает индексам начальные значения й вводит в верхнюю половину ОЗУ начальную зону с ленты.
Блоки 4—12 осуществляют запись в ОЗУ одной зоны данных с ленты, движущейся в прямом направлении, упо рядочение двух зон в ОЗУ в единый упорядоченный уча сток и запись младшего из упорядоченных участков на магнитную ленту вместо считанного участка. Для этого запись и считывание отделяются друг от друга операто ром перемотки на одну зону. Перемотка ленты и внут реннее упорядочение в ОЗУ выполняются параллельно. Оператор записи на ленту может выполняться только после завершения обоих параллельных процессов. Блоки 13—20 осуществляют запись в верхнюю зону ленты стар шего из упорядоченных участков. Ввиду того, что его раз мещение является окончательным, верхняя граница J2 сме щается на единицу вниз. Блоки 22—24 выполняют запись в ОЗУ зоны данных при перемещении ленты в обратном направлении, упорядочение в ОЗУ двух зон и запись старшего из упорядоченных участков на ленту вместо считанного участка. Ввиду того, что считывание и запись выполняются при движении ленты в разных направлени ях, их не разделяет оператор перемотки. Перемотка вы полняется после записи перед считыванием следующей зоны. Блоки 25, 26 осуществляют запись в нижнюю зону ленты (из еще неупорядоченного ее участка) младшего из упорядоченных участков с переходом к корректиров ке нижней границы.
Как при движении ленты в прямом, так и при дви жении в обратном направлении каждая зона проходится
10 А. А. Папернов, В. Я. Подымов