
книги из ГПНТБ / Папернов А.А. Методы упорядочения информации в цифровых системах
.pdf180ГЛ. 4. УПОРЯДОЧЕНИЕ С МИНИМАЛЬНОЙ ПАМЯТЬЮ
—сложность одного сравнения с последующим переме
щением одного из сравнивавшихся элементов в |
памяти; |
Ik — степень внутренней неупорядоченности |
последо |
вательности, сформированной в k-м этапе.
Сложность всего k-ro этапа, заключающаяся в упо
рядочении hk последовательностей, равна |
|
|
|
|||||
Tk = hk |
(tnk - 1 ) 7 , |
+ hkIkT2 |
= (n- |
hk) T1 + hkIkT2. |
(4.77) |
|||
Сложность |
всей |
процедуры упорядочения |
равна |
|||||
£ i ( l o g , n) |
£ i ( l o g 8 f i ) r , |
. |
|
-, |
|
|
||
2 |
т.. |
2 |
[(»-£)г.+ £/;г1]« |
|
|
|||
|
|
|
|
|
£.(log2 п) |
|
|
|
|
|
^nilog.n-^T. |
|
+ nT, |
2 |
— • |
(4 -78) |
|
Сложность |
процедуры |
представляет |
собой |
сумму |
||||
двух составляющих: составляющей |
|
|
|
|||||
|
|
Т\ = л (logjj/г— |
1) Tlt |
|
|
(4.79) |
не зависящей от исходного состояния массива и его из менения в процессе упорядочения, и составляющей
Ти = пТ2 |
J |
t ï - , |
(4.80) |
|
k=i |
z |
|
существенно зависящей от изменения степени внутренней неупорядоченности формируемых на разных этапах по следовательностей. Эта составляющая, естественно, дол жна оказаться различной в случаях чередования кратных и некратных шагов. Ниже оба эти случая анализируются раздельно.
4.5.2. Сложность процедуры с чередованием кратных
шагов. При hk |
= —hk_1 |
степень |
внутренней неупорядо |
|
ченности последовательности, |
сформированной |
в k-м |
||
этапе, равна |
степени |
взаимной |
неупорядоченности |
двух |
последовательностей, упорядоченных во время (k—1)-го этапа. Если, начиная с первого этапа, шаг каждого по следующего этапа был точно равен половине шага пре-
§ 4.5. СЛОЖНОСТЬ ПРОЦЕДУРЫ УПОРЯДОЧЕНИЯ |
181 |
дыдущего этапа, то формируемые последовательности оказываются абсолютно случайными по составу.
В соответствии с формулой (4.61) при tn = mk — 2k~l степень внутренней неупорядоченности последовательно сти, формируемой в k-м этапе, выражается как
|
I k = |
- ^ - |
(2*-1 + 1) |
|
|
(4.81) |
|
|
Составляющая сложности процедуры Тц (4.80) может |
||||||
быть вычислена |
как сумма |
членов, равных |
|
|
|||
|
|
|
пТ2 А |
= |
0,157л Т, 2*/., |
|
(4.82> |
по |
формуле |
суммы членов |
геометрической |
прогрессии |
|||
Т„ |
= 0,157 пТ, |
' ѵ " 2*/. = |
0,157пТ2 |
- ' ) |
~ |
||
|
|
|
*й |
|
/ 2 - 1 |
|
|
|
|
|
|
|
Ä 0,54 Т2п'/>. |
(4.83> |
|
|
Формула |
(4.82) показывает распределение |
составля |
ющей Tu по этапам. Сложность представляет собой воз растающую функцию от номера этапа. При больших п
составляющая Г ц , |
пропорциональная га8/г, |
начинает |
|
преобладать над |
составляющей Т\ |
(4.79), |
пропорцио |
нальной nlog2tt, и в конечном итоге |
в основном опреде |
ляет общую сложность процедуры при чередовании крат ных шагов.
4.5.3. Сложность процедуры с чередованием некрат ных шагов. Рассмотрим массив, который к началу k-то этапа всеми предшествующими этапами приведен в со стояние с hk—\ упорядоченными последовательностями^ содержащими по rrik—i элементов. Пусть степень взаим ной неупорядоченности любой пары из этих последова
тельностей равна |
/ в з . |
|
|
|
Выделим в / в з |
две составляющие: |
|
||
а) составляющую |
/ В з , вносимую trik—i |
статистиче |
||
ски эквивалентными |
парами; |
очевидно, что |
|
|
|
4 |
= ^ f - |
= 2*-*; |
(4.84> |
182 ГЛ. 4. УПОРЯДОЧЕНИЕ С МИНИМАЛЬНОЙ ПАМЯТЬЮ
б) составляющую Гвг, вносимую всеми остальными, т. е. статистически не эквивалентными парами, т. е.
|
|
/" |
— I |
— I |
— I |
— 2ê ~2 |
(4.85) |
||||
|
|
* R 3 |
1 |
R 3 |
* В З |
* В З |
|
• |
\ |
' |
|
В § 4.3 было показано, что последовательность, |
сфор |
||||||||||
мированная |
для упорядочения |
в |
k-ш этапе, |
содержит |
|||||||
/ Л £ _ і / 2 ~ 2 * ~ 2 |
|
статистически эквивалентных |
пар и боль |
||||||||
шее количество пар, близких к |
статистической эквива |
||||||||||
лентности. Количество таких пар при mk<hk-\ |
|
увели |
|||||||||
чивается |
вдвое |
по |
сравнению |
с |
последовательностью, |
||||||
объединяющей |
две |
последовательности из т А _ х |
эле |
||||||||
ментов, |
а |
при |
mk~>hk-\ |
— в |
|
несколько |
меньшей |
степени. Однако это уменьшение происходит не за счет
пар, |
расположенных |
на |
соседних |
или |
самых |
близких |
||||||||
уровнях, и мы без большой погрешности можем |
считать, |
|||||||||||||
что |
и при mk > /гА „і |
количество |
близких |
к статистиче |
||||||||||
ской эквивалентности пар увеличивается вдвое. |
|
|
||||||||||||
Следовательно, |
при чередовании |
некратных |
шагов |
|||||||||||
|
h = |
4 + |
2 4 = |
2/вз - |
4 = |
2/ в з - |
|
2*-2 . |
(4-86) |
|||||
Д л я |
двух |
первых |
этапов |
/ в з |
и I k |
можно |
определить |
по |
||||||
точным формулам |
(п. 4.2.3): |
|
|
|
|
|
|
|
||||||
|
|
|
|
2 |
|
|
|
|
|
2 |
|
2 |
2 ' |
|
k = 2, |
|
iL = —, |
|
|
|
|
l'a = 2 — — 1 = — • |
|
||||||
|
|
|
|
3 |
|
|
|
|
|
3 |
|
|
3 |
|
Начиная |
с 3-го этапа |
для / в з |
будем |
использовать значе |
||||||||||
ния, приведенные в табл. 4.2. Получим: |
|
|
|
|
||||||||||
|
k = |
3, |
/ 2 |
- |
3,64, |
|
/ 3 = |
2-3,64 — 2 = 5,28; |
|
|||||
|
|
|
1 В З ~ — |
|
|
|
|
|
|
|
|
|
|
|
|
k = |
4, |
/ 3 |
- |
5,85, |
|
/4 = |
2-5,85 — 4 = 7,7; |
|
|||||
|
|
|
' В З |
" |
|
|
|
|
|
|
|
|
|
|
|
k - 5, |
1 вз — 8, |
|
|
/б = 2 - 8 — 8 = 8. |
|
|
|||||||
Д л я |
5-го |
и последующих |
этапов |
I ' k |
= 2k~2. |
Подставляя |
||||||||
полученные |
значения |
ïk |
в |
формулу |
(4.80) |
для |
Ти, |
§ 4.6. БЛОК-СХЕМА АЛГОРИТМА
получим
f + 4-5,28 + ^ - 7 , 7 +
--пТ„ (0,25 log2 « + 0,8). (4.87)
Суммарная сложность процедуры с учетом составляю щей Ті оказывается равной
Т = Г, + Тц Ä n log2 п (7\ + 0,25 Т2 ) + 0,8 л Т 2 - п Ти (4.88)
т. е. пропорциональной n\og2n. В отличие от случая с чередованием кратных шагов преобладающей оказывает ся составляющая Т\ . Пересылки элементов массива в рабочие ячейки и обратно в процессе выполнения опе раторов вставки составляют существенную долю общей сложности процедуры. Поэтому важное значение приоб ретают меры по уменьшению составляющей Т\ .
Один из способов уменьшения сложности состоит в- следующем. Каждый элемент массива перед засылкой его в рабочую ячейку сравнивается с соседним меньшим по номеру элементом в своей последовательности. Если обнаруживается отсутствие инверсии, то пересылка эле мента в рабочую ячейку не производится. Тем самым сложность процедуры уменьшается на две пересылки. На последних этапах, когда распределение элементов масси ва по последовательностям достаточно равномерно, доля таких случаев может достигать 75% (почти 100% срав нений элемента с соседним статистически эквивалентным элементом). Соответствующий вариант метода вставки описан ранее (см. п. 3.5.3, рис. 3.18).
§ 4.6. Блок-схема алгоритма упорядочения |
|
|||
Блок-схема алгоритма упорядочения приведена |
на |
|||
рис. 4.7. В схеме |
использованы обозначения: л —размер |
|||
массива, |
hL—шаг |
в |
і-м этапе, / — текущий номер |
1-го |
из сравниваемых |
элементов (пересылаемого в рабочую- |
|||
ячейку), |
k — текущий номер 2-го из сравниваемых |
эле |
||
ментов, |
/0 — номер |
1-го элемента упорядочиваемой |
по- |
184 ГЛ. 4. УПОРЯДОЧЕНИЕ С МИНИМАЛЬНОЙ ПАМЯТЬЮ
следовательности, с — номер |
рабочей ячейки, М- иден |
тификатор упорядочиваемого |
массива. |
Формиробанив |
Формиробание |
первого шага h, |
|
очередного шага |
|
j:=jO:-jO+l
М\к+п\.=м{к\
m
Рис. 4.7. Блок-схема алгоритма упорядочения с предельно жесткими ограничениями по объему памяти.
Блок 7 формирует шаг hi для первого этапа про цедуры. Возможные варианты внутренней структуры бло ка / будут описаны ниже.
S 4.6. БЛОК-СХЕМА АЛГОРИТМА |
185 |
Блок 2 присваивает индексам / и /0 исходные значе ния, равные единице (для упорядочения 1-й последова тельности) .
Блок 3 формирует номер / первого из двух сравни ваемых элементов, подлежащего пересылке в рабочуюячейку.
Блок 4, сравнивая j с размером массива п, проверя ет, не исчерпалась ли упорядочиваемая последователь ность.
Блок 5, сравнивая элемент массива M[j] |
и элемент |
той же последовательности M[j—h] с соседним |
меньшим |
номером, проверяет, нужно или не нужно пересылать элемент M[j] в рабочую ячейку.
Если оказывается, что нужно, то блоки 6, 7 выпол няют первый шаг процедуры упорядочения выделенной последовательности методом вставки и подготовку после дующих шагов.
Последующие шаги процедуры упорядочения после
довательности методом вставки |
выполняются блока |
ми 8—П. |
|
Если блок 4 выявит, что упорядочение последователь |
|
ности закончено, то осуществляется |
переход к блоку 12, |
формирующему номер 1-го элемента следующей последо вательности, подлежащей упорядочению.
Блок 13, сравнивая номер 1-го элемента этой после довательности с шагом h, проверяет, не закончился ли этап, и :в случае, если он не закончился, осуществляет переход к блоку 3, начинающему упорядочение следую щей последовательности.
Если этап закончился, то осуществляется переход к блоку 14, сравнивающему шаг только что выполненного этапа с его конечным значением, равным 1, и проверяю щему тем самым, не закончилась ли вся процедура упо рядочения.
Если процедура не закончилась, то осуществляется переход к блоку 15, формирующему шаг для следующе го этапа.
Рассмотрим два основных варианта внутренней струк туры блоков 1 и 15, формирующих первый и очередной
шаги. |
|
Шаг hi |
|
В а р и а н т |
№ 1. |
формируется путем сдви |
|
га вправо на |
один |
разряд |
двоичного кода размера |
.186 ГЛ. 4-. УПОРЯДОЧЕНИЕ С МИНИМАЛЬНОЙ ПАМЯТЬЮ
массива п:
h = hx : = n 2.
Последующие шаги формируются путем сдвига впра во на один разряд кода предыдущего шага с установкой младшего его разряда в единицу:
1)h : = h ~ 2 ,
2) h : = h \ J a |
(а = 0... 01 = 1, |
V — операция |
поразряд |
|||
ного логического |
сложения кодов). Тем самым |
обеспечи |
||||
вается некратный шаг после |
любого |
из |
этапов |
про |
||
цедуры. |
|
|
|
|
|
|
В а р и а н т № 2. Шаг h\ формируется |
путем |
сдвига |
||||
вправо на один |
разряд кода |
размера |
массива с после- |
дующей установкой в единицу группы из семи его млад ших разрядов:
1)h: = п~-2;
2)h : =h V b
6 = 0... 01111111 = 2 8 — 1;
3) Сравнение hen. Если h<n, |
то выход из блока /, |
в противном случае — сдвиг h на |
один разряд вправо: |
л: = л - ь 2
ипереход к новому повторению п. 3). Пункт 3) нужен для случая формирования первого шага для массива, по размеру меньшего чем 28 — 1 элемент.
Последующие шаги формируются путем сдвига на один разряд вправо кода предыдущего шага:
А: = /і-т-2.
При этом обеспечивается некратный шаг на первых семи этапах процедуры, которых достаточно для требуемого выравнивания по составу всех формируемых последова тельностей.
Количество разрядов, устанавливаемых в единицу, было выбрано на основе экспериментальных исследова ний. Из теоретического анализа (п. 4.4.3) следовало, что для требуемого выравнивания по составу всех упорядо чиваемых последовательностей достаточно пяти этапов. Однако поскольку самый анализ основывался на ряде допущений, то и выведенное на его основе количество этапов является приближенным и нуждается в экспери' ментальном уточнении.
ГЛАВА 5
УПОРЯДОЧЕНИЕ ДЕЛЕНИЕМ МАССИВА
§ 5.1. Предпосылки метода
5.1.1. Методы внутреннего и взаимного упорядочения подмножеств. Методы упорядочения, рассмотренные в двух предыдущих главах, использовали один общий принцип: в процессе упорядочения исходный массив эле ментов разделялся на ряд внутренне упорядоченных под множеств и, начиная с предельно малых подмножеств (состоящих всего из одного элемента), шло последова тельное построение на каждом этапе меньшего числа все более крупных внутренне упорядоченных подмножеств, пока не образовывался один общий упорядоченный мас сив. Другими словами, методы упорядочения двух пре дыдущих глав базировались на внутреннем упорядочении выделенных из массива подмножеств.
Ранее отмечалось (см. главу 2), что для любого раз биения неупорядоченного массива на подмножества сте пень его неупорядоченности определяется суммой степе ней неупорядоченности каждого из подмножеств в отдельности (т. е. суммой степеней внутренней неупоря доченности каждого из подмножеств) и суммой степеней взаимной неупорядоченности всех пар подмножеств. Воз можно построение процедуры упорядочения, основанной на взаимном упорядочении выделенных из массива под множеств.
Если процедуры, базирующиеся на внутреннем упо рядочении, должны на каждом шаге увеличивать объем упорядоченных подмножеств для того, чтобы уменьшать число взаимно неупорядоченных пар подмножеств, сводя его к нулю в случае образования единственного предель ного подмножества при окончательном упорядочении,
ГЛ. 5. УПОРЯДОЧЕНИЕ ДЕЛЕНИЕМ МАССИВА
то процедуры, основанные на взаимном упорядочении, наоборот, должны на каждом шаге увеличивать число взаимно упорядоченных подмножеств для того, чтобы уменьшать объем каждого внутренне неупорядоченного подмножества, сводя его к предельному значению — од ному элементу — при окончательном упорядочении.
В следующих двух главах будут рассмотрены про цедуры упорядочения именно такого типа.
5.1.2. Разделение массива на взаимно упорядоченные подмассивы. Основным оператором процедуры упорядо чения, основанной на взаимном упорядочении подмно жеств, является оператор разделения исходного массива на взаимно упорядоченные подмассивы. Их внутренняя упорядоченность при этом не контролируется. В Данной главе нас будет интересовать лишь простейший случай разделения массива на два взаимно упорядоченных под массива.
Пусть задан исходный массив из п элементов, распо ложенных на позициях с индексами gE={l, 2, п). В результате действия оператора исходный массив дол жен разделиться на два взаимно упорядоченных подмас
сива В и С, расположенных |
на позициях с индексами |
||
Œi{\, 2, |
k} и jE^{k+l, |
k + 2, |
п}. Условие взаим |
ной упорядоченности требует, чтобы любой элемент из первого подмассива был упорядочен с любым элементом из второго подмассива, и наоборот. На первый взгляд может показаться, что для обеспечения взаимной упо рядоченности двух подмассивов может потребоваться проверка всех возможных пар элементов, т. е. сравнение признаков каждого элемента одного подмассива с признаками каждого элемента второго. Однако это не верно.
Пусть для определенности рассматривается случай упорядочения по возрастанию значения признака. Тогда в первом из подмассивов существует элемент с максимальным значением признака в данном подмасси-
ве, а |
во втором |
из подмассивов — элемент |
с минималь |
||
ным |
значением |
признака |
в этом |
подмассиве и, кроме |
|
того, |
пара этих |
элементов упорядочена. Следовательно, |
|||
максимальное значение |
признака |
элемента |
первого из |
подмассивов не может превосходить минимального зна чения признака элемента второго подмассива. Оно может
§ 5.1. ПРЕДПОСЫЛКИ МЕТОДА |
189 |
быть только меньше этого значения или, в крайнем слу
чае, равно |
ему. Поэтому |
всегда |
существует |
некоторое |
||
разделяющее |
значение |
признака |
(яо) |
для двух |
взаимно |
|
упорядоченных |
подмассивов |
(рис. 5.1). |
Это значение при |
знака должно быть не меньше максимального значения признака элемента первого подмассива и не больше ми нимального значения признака элемента второго подмас сива. В общем случае таких разделяющих значений для двух данных подмассивов может быть несколько. Раз деляющее значение признака единственно лишь в том
Рис. 5.1. Разделяющее значение признака я 0 для двух взаимно упо рядоченных подмассивов.
случае, когда максимальное значение признака подмас сива В совпадает с минимальным значением признака подмассива С. А это возможно тогда, когда, во-первых, в исходном массиве есть элементы с совпадающими значениями признаков, и во-вторых, эти элементы попа ли в различные подмассивы.
Наличие разделяющего значения признака Яо весьма существенно, так как гарантирует возможность разде ления массива при проведении лишь одного сравнения признаков на каждый элемент исходного массива. В срав нении, очевидно, должно участвовать значение яо и зна чение признака рассматриваемого элемента. Очевидно утверждение, что некоторое произвольно выбранное зна чение признака, безразлично, совпадающее или несовпа дающее со значением признака какого-либо элемента в исходном массиве, может быть разделяющим значением признака для некоторого деления исходного массива на два подмассива при условии, что в исходном массиве существуют элементы, имеющие значение признака, как