Скачиваний:
83
Добавлен:
01.05.2014
Размер:
3.82 Mб
Скачать

Original pages: 218-294 151

Так как ни в одной из этих пар не может содержаться более одного из наибольших t элементов (почему?), то процедура Алексеева должна выбрать t наибольших элементов.

Если нам нужно выбрать t наибольших из nt элементов, то мы можем применить эту процедуру n − 1 раз (исключая каждый раз t элементов); следовательно,

 

^

^

(18)

 

Ut(nt) (n − 1)(2S(t) + t):

Алексеев также получил интересную нижнюю оценку для задачи выбора.

 

^

(t + 1)e.

 

 

Теорема A. Ut(n) (n − t)dlog2

 

 

Доказательство. Удобнее рассматривать эквивалентную задачу выбора наименьших t элементов. Около каждой прямой компараторной сети можно выписать числа (l; u), как показано на рис. 54, где l и u обозначают соответственно минимальное и

Picture:

Рис. 54. Отделение четырех наибольших от четырех наименьших. (Числа над

 

прямыми используются в доказательстве теоремы A.)

максимальное значения, которые могут появиться в этом месте, если входом служит перестановка f1; 2; : : :; n g. Пусть li и lj—нижние оценки на прямых i и j перед сравнением xi : xj, и пусть li0 и lj0 —соответствующие нижние оценки после этого

Picture:

Рис. 55. Иная интерпретация сети, изображенной на рис. 54.

 

сравнения. Очевидно, что li0 = min(li; lj), а в упр. 24 доказывается (неочевидное) соотношение

 

 

lj0 li + lj:

(19)

Теперь дадим другую интерпретацию действия сети (рис. 55); предположим, что на всех входных прямых содержится нуль, а каждый ”компаратор” помещает теперь на верхнюю прямую меньший из его входов, а на нижнюю прямую—больший вход плюс один. Получающиеся числа hm1; m2; : : : ; mni обладают свойством

2mi li

(20)

в любом месте сети, так как это свойство первоначально справедливо и сохраняется каждым компаратором в силу (19). Кроме того, окончательное значение

m1 + m2 + + mn

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

Если сеть выбирает наименьшие t чисел, то n−t из чисел li больше или равны t+1; следовательно, n − t из чисел mi должны быть dlog2(t + 1)e.

Нижняя оценка в теореме A оказывается точной, если t = 1 или t = 2 (см. упр. 19). В табл. 1 даны

^

^

^

 

 

 

 

 

 

значения Ut(n), Vt(n) и Wt(n) для небольших t и n.

 

 

 

Таблица 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

^

^

^

 

 

Сравнения, необходимые для сетей выбора (Ut(n), Vt

(n), Wt(n))

 

 

 

t = 1

t = 2

t = 3

t = 4

 

t = 5

t = 6

 

 

n = 1 (0; 0; 0)

 

 

 

 

 

 

 

 

n = 2 (1; 1; 1) (0; 1; 1)

 

 

 

 

 

 

 

n = 3

(2; 2; 2)

(2; 3; 3)

(0; 2; 3)

 

 

 

 

 

 

n = 4

(3; 3; 3)

(4; 5; 5)

(3; 5; 5)

(0; 3; 5)

 

 

 

 

 

n = 5

(4; 4; 4)

(6; 7; 7)

(6; 7; 8)

(4; 7; 9)

(0; 4; 9)

 

 

 

n = 6

(5; 5; 5)

(8; 9; 9)

(8; 10; 10)

(8; 10; 12)

(5; 9; 12)

(0; 5; 12)

 

 

 

 

 

 

 

 

 

 

Упражнения

(ПЕРВАЯ ЧАСТЬ) Далее в нескольких упражнениях дано более глубокое развитие теории сетей сортировки, поэтому будет удобно ввести некоторые обозначения. Вместо модуля сравнения-обмена будем писать [i : j]. Сеть с n входами и r компараторными модулями запишем как [i1 : j1][i2 : j2]: : : [ir : jr], где все i и j меньше или равны n; для краткости будем называть ее n-сетью. Сеть называется

152Original pages: 218-294

стандартной, если iq < jq для 1 q r. Так, например, рис. 44 описывает стандартную 4-сеть, обозначаемую последовательностью компараторов [1 : 2][3 : 4][1 : 3][2 : 4][2 : 3].

Наши соглашения в тексте об изображении диаграмм сетей позволяют рисовать только стандартные сети; все компараторы [i : j] изображаются прямой от i к j, где i < j. Если нужно нарисовать нестандартную сеть, то можно использовать стрелку от i к j, указывающую, что большее число направляется к острию стрелки. Например, на рис. 56 изображена нестандартная сеть для 16 элементов с компараторами [1 : 2][4 : 3][5 : 6][8 : 7] и т. д. В упр. 11 доказывается, что это сеть

сортировки. Если x = hx1; : : :; xni есть n-вектор, а есть n-сеть, то используем обозначение x для вектора чисел h(x )1; : : : ; (x )ni, порожденных сетью. Положим также для краткости a_b = max(a; b),

a^b = min(a; b), a = 1−a; тогда (x[i : j])i = xi ^xj, (x[i : j])j = xi _xj и (x[i : j])k = xk для i 6= k 6= j. Будем говорить, что является сетью сортировки, тогда и только тогда, когда (x )i (x )i+1 для 1 i < n и всех x.

Символ e(i) обозначает вектор, у которого в позиции i находится 1, а в остальных местах 0; таким образом, (e(i))j = ij. Символ Dn обозначает множество всех 2n n-местных векторов из 0 и 1, а Pn обозначает множество всех n! векторов, являющихся перестановками f1; 2; : : : ; n g. Мы будем использовать обозначения x^y и x_y для векторов hx1 ^ y1; : : :; xn ^ yniи hx1 _ y1; : : : ; xn _ yniи будем писать x y, если xi yi при всех i. Таким образом, x y тогда и только тогда, когда x _ y = y, и тогда и только тогда, когда

Picture: Рис. 56. Нестандартная сеть, основанная на битонной сортировке.

x ^ y = x. Если x и y лежат в Dn, то будем говорить, что x покрывает y, если x = y _ e(i) 6= y при некотором i. Наконец, для всех x в Dn пусть (x) будет числом единиц в x, a (x)—числом нулей; таким образом, (x) + (x) = n.

1.[20] Нарисуйте сеть четно-нечетного слияния для m = 3 и n = 5.

2.[22] Покажите, что алгоритму сортировки В. Пратта (см. упр. 5.2.1-30) соответствует сеть сор-

тировки n элементов, имеющая приблизительно (log2 n) (log3 n) уровней задержки. Нарисуйте такую сеть для n = 12.

3.[M20] (К. Э. Бэтчер.) Найдите простое соотношение между C(m; m − 1) и C(m; m).

4. [М23] Докажите, что ^ .

> T(6) = 5

5.[М21] Докажите, что выражение (13) действительно определяет время задержки для сети сортировки, описанной соотношениями (10).

6.[28] Пусть T(n) будет минимальным числом стадий, требуемых для сортировки с одновременным выполнением непересекающихся сравнений (без сетевого ограничения); каждое такое множество

сравнений может быть представлено узлом, содержащим множество пар i1 : j1, i2 : j2, : : :, ir : jr, где все i1, j1, i2, j2, : : :, ir, jr различны; от этого узла отходит вниз 2r ветвей, соответствующих случаям

hKi1 < Kj1 ; Ki2 < Kj2; : : : ; Kir < Kjr i; hKi1 > Kj1 ; Ki2 < Kj2; : : : ; Kir < Kjr iи т. д.

Докажите, что T(5) = T(6) = 5.

7.[25] Покажите, что если последний компаратор сети для n = 10 на рис. 49 поместить непосредственно перед вторым и третьим с конца компараторами, то сеть по-прежнему будет сортировать.

8.

^

+m2; n1

+n2)

^

^

; n2)+min(m1; n2) при m1; m2; n1; n2

[М20] Докажите, что M(m1

M(m1

; n1)+M(m2

 

0.

 

^

 

^

^

9.

 

 

 

[М25] (Р. У. Флойд.) Докажите, что M(3; 3) = 6, M(4; 4) = 9, M(5; 5) = 13.

10.[М22] Докажите, что битонный сортировщик Бэтчера, как он определен в тексте перед (15), действительно работает. [Указание. Достаточно доказать, что будут сортироваться все последовательности, состоящие из k единиц, за которыми следуют l нулей, за которыми следуют n − k − l единиц.]

11.[М23] Докажите, что битонный сортировщик Бэтчера порядка 2p будет сортировать не только последовательности hz0; z1; : : :; z2p−1i, для которых z0 : : : zk : : : z2p−1, но также и все последовательности, для которых z0 : : : zk : : : z2p−1. [Как следствие этого, сеть на рис. 56 будет сортировать 16 элементов, так как каждая стадия состоит из битонных сортировщиков или обращенных битонных сортировщиков, применяемых к последовательностям, которые были отсортированы в противоположных направлениях.]

12.[М20] Докажите или опровергните следующее утверждение: если x и y—битонные последовательности равной длины, то последовательности x _ y и x ^ y также битонные.

>13. [24] (X. С. Стоун). Покажите, что сеть сортировки для 2t элементов можно построить по схеме, проиллюстрированной для t = 4на рис. 57. Каждый из t2 шагов этой схемы состоит из ”идеального

Original pages: 218-294 153

тасования” первых 2t−1 элементов с последними 2t−1, за которым следуют операции, выполняемые одновременно над 2t−1 парами соседних элементов. Каждая из этих операций обозначена либо ”0” (нет операции), либо ”+” (стандартный компараторный модуль), либо ”−” (обращенный компараторный модуль). Сортировка протекает в t стадий по t шагов каждая; на последней стадии все операции суть ”+”. В течение стадии s при s < t мы выполняем t − s шагов, где все операции суть ”0”, а затем выполняем s шагов, где на каждом q−м шаге поочередно выполняются 2q−1 операций ”+” и затем 2q−1 операций ”−” при q = 1, 2, : : :, s.

[Заметим, что эта схема сортировки может быть выполнена весьма простым устройством, реализующим один шаг ”тасования и операций” и передающим выход обратно на вход. Первые три шага на рис. 57 можно, конечно, устранить, они оставлены, лишь чтобы сделать схему понятнее. Стоун замечает, что тот же принцип ”тасования/операции” встречается в некоторых других алгоритмах, таких, как быстрое преобразование Фурье (см. п. 4.6.4).]

14.[М20] Докажите, что любая (1; n)-сеть слияния без разветвления должна иметь не менееdlog2(n + 1)e уровней задержки.

15.[20] Найдите нестандартную сеть сортировки четырех элементов, содержащую только пять компараторных модулей.

16.[M22] Докажите, что следующий алгоритм преобразует любую сеть сортировки [i1 : j1] [ir : jr] в стандартную сеть сортировки:

T1. Пусть q— наименьший индекс, такой, что iq > jq. Если таких индексов нет, то остановиться.

T2. Заменить все вхождения iq на jq и все вхождения jq на iq во всех компараторах [is : js] для q s r. Вернуться к шагу T1.

Например, сеть [4 : 1][3 : 2][1 : 3][2 : 4][1 : 2][3 : 4] преобразуется сначала в [1 : 4][3 : 2][4 : 3][2 : 1][4 : 2][3 : 1], затем в [1 : 4][2 : 3][4 : 2][3 : 1][4 : 3][2 : 1], затем в [1 : 4][2 : 3][2 : 4][3 : 1][2 : 3][4 : 1] и т. д., пока не получится стандартная сеть [1 : 4][2 : 3][2 : 4][1 : 3][1 : 2][3 : 4].

 

 

Picture: Рис. 57. Сортировка 16 элементов с ”идеальным тасованием”.

 

 

17.

[М25] Пусть Dtn будет множеством всех

nt

последовательностей hx1; : : :; xni из нулей и единиц,

 

 

 

t

 

 

^

n

 

 

 

 

 

 

 

имеющих ровно

единиц. Докажите,

что U

 

 

 

 

 

 

 

 

 

t( ) равно минимальному числу компараторов, кото-

 

 

 

 

 

 

 

 

 

 

 

^

 

 

 

рые необходимы в сети, сортирующей все элементы Dtn; что Vt(n) равно минимальному числу

 

 

компараторов, нужных для сортировки

 

 

 

 

^

 

 

 

Dtn [ D(t−1)n; и что Wt(n) равно минимальному числу

>

 

компараторов, нужных для сортировки

0 k t Dkn.

 

t

 

элементов, требует не менее

t

 

18.

 

 

 

S

 

2

 

− 1

 

( −

 

 

1)dlog2(t + 1)e + dlog2 te компараторных модулей. [Указание: см. доказательство теоремы A.]

 

 

19.

 

 

^

^

 

 

 

 

 

 

 

 

[М22] Докажите, что U2(n) = 2n − 4 и V2(n) = 2n − 3 для всех n 2.

 

 

20.

 

 

^

 

 

 

 

 

 

 

 

 

[24] Докажите, что V3(5) = 7.

 

 

 

 

 

 

 

 

21.[M15] Пусть —любая n-сеть, а x и y—два n-вектора. Докажите, что из x y следует x y .

22.[М15] Докажите, что если x и y суть n-векторы действительных чисел, то x y (x ) (y ). (Здесь x y—скалярное произведение x1y1 + + xnyn.)

23.[М17]. Пусть есть n-сеть. Докажите, что существует перестановка p 2 Pn, такая, что (p )i = j тогда и только тогда, когда в Dn найдутся векторы x, y, такие, что x покрывает y, (x )i = 1,

(y )i = 0 и (y) = j.

>24. [M21] (В. Е. Алексеев.) Пусть есть n-сеть; введем обозначения lk = minf(p )k j p 2 Pn g, uk = maxf(p )k j p 2 Pn g при 1 k n для нижней и верхней границ диапазона значений, которые

могут появляться на прямой k выхода. Пусть lk0 и u0k—аналогично определенные величины для сети 0 = [i : j]. Докажите, что li0 = li ^ lj, lj0 li + lj, u0i u+uj − (n + 1), u0j = ui _ uj. [Указание:

для данных векторов x и y из Dn, таких, что (x )i = (y )j = 0, (x) = li, (y) = lj, найдите вектор z из Dn, такой, что (z 0)j = 0, (z) li + lj.]

25.[M30] Пусть lk и uk определены, как в упр. 24. Докажите, что множество f(p )k j p 2 Pn gсодержит все целые числа между lk и uk включительно.

26.[M24] (Р. У. Флойд.) Пусть есть n-сеть. Докажите, что множество Dn = fx j x 2 Dn g может

быть определено, из множества Pn = fp j p 2 Pn g и, обратно, Pn может быть определено из Dn .

>27. [M20] Пусть x и y—векторы, и пусть x и y —отсортированные векторы. Докажите, что (x )i (y )j тогда и только тогда, когда для любой совокупности j элементов из y можно найти совокупность i элементов из x, такую, что любой элемент, взятый из x, меньше некоторого элемента,

154 Original pages: 218-294

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

>28. [М20] Следующая диаграмма показывает, как записать формулы для содержимого всех линий сети сортировки через ее входы:

Picture: p.287

Используя законы коммутативности x^y = y^x, x_y = y_x, законы ассоциативности x^(y^z) = (x ^ y) ^ z, x _ (y _ z) = (x _ y) _ z, законы дистрибутивности x ^ (y _ z) = (x ^ y) _ (x ^ z), x_(y^z) = (x_y)^(x_z), законы поглощения x^(x_y) = x_(x^y) = x и законы идемпотентности x^x = x_x = x, мы можем свести формулы в правой части этой сети соответственно к (a^b^c^d),

(a ^ b ^ c) _ (a ^ b ^ d) _ (a ^ c ^ d) _ (b ^ c ^ d), (a ^ b) _ (a ^ c) _ (a ^ d) _ (b ^ c) _ (b ^ d) _ (c ^ d), a _b _c _d. Докажите, что в общем случае t-й в порядке убывания элемент из fx1; : : : ; xn g дается ”элементарной симметрической функцией”

_

t(x1; : : : ; xn) = fxi1 ^ xi2 ^ : : : ^ xit j 1 i1 < i2 < : : : < it n g:

[Здесь nt членов объединяются операцией _ вместе. Таким образом, задача нахождения сети сортировки минимальной стоимости эквивалентна задаче вычисления элементарных симметрических функций с минимальным числом схем ”и/или”, где на каждом шаге две величины и заменяются на ^ и _ .]

29.[M20] Дано, что x1 x2 x3 и y1 y2 y3 y4 y5 и что z1 z2 ::: z8—результат слияния x с y. Найдите выражения для каждого z через x и y, используя операторы ^ и _.

30.[ВМ24] Докажите, что любая формула, содержащая ^, _и независимые переменные fx1; :::;xn g, может быть приведена с использованием тождеств из упр. 28 к ”канонической” форме 1 _ 2 _:::_k, здесь k 1 и каждый i имеет вид ^fxj j j 2 Si g, где Si—подмножество f1; 2; :::;n g и никакое множество Si не включается в Sj, если i 6= j. Докажите также, что две такие канонические формы равны для всех x1, ::: , xn тогда и только тогда, когда они идентичны (с точностью до порядка).

31.[М24] (Р. Дедекинд, 1897.) Пусть n—число различных канонических форм от x1, ::: , xn в смысле

 

упр. 30 Так, 1 = l, 2 = 4 и 3 = 18. Чему равно 4?

 

 

 

 

32.

[М28] (М. У. Грин.) Пусть G

00; 01; 11

g

; определим G

как множество всех цепочек !,

 

 

 

 

 

1

= fn+1

и ,

n+1

 

 

 

 

 

таких, что , , , ! имеют длину 2

 

!, и ! принадлежат Gn. Пусть —сеть, состоящая

 

из четырех первых уровней 16-сортировщика, изображенного на рис. 48. Покажите, что D16 =

 

G4, и докажите, что это множество имеет в точности 4 + 2 элементов. (См. упр. 31.)

 

 

>33.

[М22] Не все n функций от hx1; :::;xni из упр. 31 могут встретиться в компараторных сетях. А

 

именно докажите, что функция (x1 ^x2)_(x2 ^x3)_(x3 ^x4) не может быть результатом никакой

 

компараторной сети от hx1; :::;xni.

 

 

 

 

 

 

 

34.

[23] Является ли следующая сеть сетью сортировки?

 

 

 

 

 

Picture:

p.288

 

 

 

 

 

 

 

 

34.

[20] Докажите, что в любой стандартной сети сортировки должен по крайней мере один раз

 

встретиться каждый из компараторов [i : i + 1] при 1 i < n.

 

 

 

 

>36.

[22] Сеть на рис. 47 содержит только кратчайшие сравнения [i : i + 1]; будем называть такие сети

 

примитивными, (a) Докажите, что примитивная сеть сортировки для n элементов должна иметь

 

не менее

 

n

компараторов. [Указание: рассмотрите инверсии перестановки.] (b) (Р. У. Флойд,

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

1964.)

Пусть —примитивная сеть для n элементов, а x—вектор, такой, что

x

>

x

 

 

 

 

 

 

 

 

 

(

)i

(

)j при

некоторых i < j. Докажите, что (y )i > (y )j, где y—вектор hn;n − 1; :::; 1i. (с) В качестве следствия (b) докажите, что примитивная сеть является сетью сортировки тогда и только тогда, когда она сортирует единственный вектор hn;n − 1; :::; 1i!

37.[М22] Четно-нечетная сортировка с транспозициями для n чисел, n 3, это n-уровневая сеть с

12n(n − 1) компараторами, напоминающая кирпичную кладку (рис. 58). (Если n четно, имеются

две возможности.) Такую сортировку особенно легко реализовать аппаратурно, так как попеременно выполняются только два вида действий. Докажите, что такая сеть действительно будет правильной сетью сортировки. [Указание: см. упр. 36.]

Picture:

Рис. 58. Четно-нечетная сортировка с транспозициями.

38.[29] Можно дать другую интерпретацию сетям сортировки, считая, что на каждой линии находится мультимножество из m чисел, а не одно число; при этой интерпретации операция [i : j]

Original pages: 218-294 155

заменяет xi и xj соответственно на xi upup xj и xi dndnxj—наименьшие m и наибольшие m из 2m чисел xi]xj. (Рис. 59 иллюстрирует это при m = 2.) Если a и b суть мультимножества, содержащие m чисел каждое, то будем говорите, что a lflf b тогда

Picture:

Рис. 59. Другая интерпретация сети сортировки, представленной на рис. 44:

 

каждый компараторный модуль выполняет операцию слияния.

и только тогда, когда a upupb = a (или, эквивалентно, a dndn b = b; наибольший элемент a меньше или равен наименьшему элементу b). Таким образом, a upupb lflf a dndnb.

Пусть есть n-сеть, a x = hx1; : : : ; xni—вектор, в котором каждая компонента xi — мультимножество из mэлементов. Докажите, что если (x )i не lflf(x )j в описанной интерпретации, то в Dn найдется вектор y, такой, что (y )i = 1 и (y )j = 0. [Следовательно, сеть сортировки n элементов превращается в сеть сортировки mn элементов, если заменить сравнения m-путевыми слияниями. На рис. 60 изображен восьмиэлементный сортировщик, построенный из четырехэлементного с использованием этого наблюдения.]

>39. [М23] Покажите, что в обозначениях упр 38 (x upup y)upupz = x upup(y upupz)и (x dndn y)dndnz = x dndn(y dndnz), однако (x dndn y)upupz) не всегда равно (x upup z)dndn(y upupz) и (x upup y)dndn (x upup z)dndn(y upupz) не всегда равно средним m элементам x ] y ] z. Найдите правильную формулу для этих средних элементов, использовав в ней x, y, z, а также операции upup и dndn.

40.[M25] (Р. Л. Грэхем.) Компаратор [i : j] называется избыточным в сети 1[i : j] 2, если либо (x 1)i (x 1)j для всех векторов x, либо (x 1)i (x 1)j для всех векторов x. Докажите, что если является сетью с r неизбыточными компараторами, то найдутся по крайней мере r различных упорядоченных

 

Picture:

Рис. 60. 8-сортировщик, построенный из 4-сортировщика с использованием

 

 

 

 

 

слияния.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пар (i; j) различных индексов, таких, что (x )i (xn )j для всех векторов x. (Следовательно, сеть

без избыточных компараторов содержит не более

2 модулей.)

1

 

 

 

 

= [

 

10 :

>41. [M27] (В. Е. Алексеев.) Пусть

= [

1 :

1

]

 

[

r :

r]

 

s

r определим

s

i

i

 

j

 

: : : i

 

j

есть n-сеть; для

 

 

 

 

 

j0

]: : : [i0

: j0

][is : js]: : : [ir : jr], где i0

и j0

получены из ik и jk заменой is на js и js на is везде, где

1

s−1

s−1

 

 

k

 

 

k

 

 

 

 

 

 

4

= [1 : 4][3 : 2][1 : 3][2 :

они встречаются. Например, если = [1 : 2][3 : 4][1 : 3][2 : 4][2 : 3], то

 

4][2 : 3].

a)Докажите, что Dn = Dn( s).

b)Докажите, что ( s)t = ( t)s.

c)Сопряжением является любая сеть вида (: : : (( s1 )s2 ): : :)sk . Докажите, что имеет не более 2r−1 сопряжений.

d)Пусть g (x) = 1, если x 2 Dn , и g (x) = 0, если x 2= Dn , и пусть

 

 

 

 

 

 

f (x) = (xi1 _ xj1 ) ^ : : : ^ (xir _ xjr ):

 

 

 

 

 

 

 

 

Докажите, что g (x) =

f

0

(x)

j

0 есть сопряжение

g

.

 

 

 

 

 

 

 

 

 

 

f

 

 

 

 

 

 

 

 

 

 

 

e) Пусть

G

—направленный граф с вершинами

f1

; : : : ; n

g

и дугами i

s !

j

для

1

s

 

r.

 

 

 

 

W

 

 

 

 

 

 

 

s

 

 

 

 

Докажите, что а является сетью сортировки тогда и только тогда, когда для всех ее

сопряжений 0 в G

0

имеется ориентированный путь от i до i + 1 для 1

 

i < n. [Это

 

 

довольно интересное условие, поскольку G не зависит от порядка компараторов в .]

 

 

 

 

 

 

 

 

^

^

 

 

 

 

 

 

 

 

 

 

 

 

 

>42. [25] (Д. Ван Ворис.) Докажите, что S(n) S(n − 1) + dlog2 ne.

 

 

 

 

 

 

 

 

 

43.[23] Перестановочной сетью называется последовательность модулей [i1 : j1]: : : [ir : jr], где каждый модуль [i : j] может устанавливаться извне в одно из двух состояний: либо он передает свои входы без изменений, либо меняет местами xi и xj (независимо от значений xi и xj), и последовательность модулей должна быть такой, что на выходе можно получить любую перестановку входов при соответствующей установке модулей. Любая сеть сортировки является, очевидно, перестановочной сетью, но обратное неверно. Найдите перестановочную сеть для пяти элементов, имеющую только восемь модулей.

44.[46] Изучите свойства сетей сортировки, построенных из m-сортировщиков вместо 2-сортиров- щиков. (Например, Г. Шапиро построил сеть для сортировки 16 элементов, использовав четырнадцать 4-сортировщиков. Наилучшее ли это решение? Существует ли для всех m эффективный способ сортировки m2 элементов с помощью модулей, выполняющих m-сортировку?)

45.[48] Найдите, (m; n)-сеть слияния с числом компараторов, меньшим C(m; n), или докажите, что такой сети не существует.

156Original pages: 218-294

46.[48] Найдите (m; n)-сеть слияния меньше, чем с dlog2(m + n)eуровнями задержки, или докажите, что ее не существует.

47.[48] Изучите класс схем сортировки, которые могут быть реализованы в виде схем с идеальным тасованием, как на рис. 57, но с другим расположением операций ”0”, ”+” и ”−”.

48.[ВМ49] Исследуйте свойства операций upup и dndn, определенных в упр. 38. Можно ли оха-

 

рактеризовать все тождества в этой алгебре каким-либо изящным способом или вывести все

 

их из конечного набора тождеств? В этом отношении такие тождества, как x upupx upup x =

 

x upup x или x upup(x dndn(x upup(x dndn y))) = x upup(x dndn y); которые имеют место только для

 

m 2, представляют относительно небольшой интерес; рассматривайте лишь тождества, спра-

 

ведливые при всех m.

49.

[M49] Каково асимптотическое поведение функции T(n), определенной в упр. б? Может ли быть

 

^

 

T(n) < T(n) при каком-нибудь n?

50.

^

[50] Найдите точное значение S(n) для какого-либо n > 8.

51.

^

[М50] Докажите, что асимптотическое значение S(n) не есть O(n log n).

УПРАЖНЕНИЯ, (ВТОРАЯ ЧАСТЬ)

Следующие упражнения имеют дело с различными типами оптимальных задач, касающихся сортировки. Первые несколько задач основаны на ”интересном ”многоголовочном” обобщении метода пузырька, предложенном Ф. Н. Армстронгом и Р. Дж. Нельсоном еще в 1954 г. [См. U. S. Patents 3029413, 3034102.] Пусть 1 = h1 < h2 < : : : < hm = n—возрастающая последовательность целых чисел; будем называть ее ”последовательностью головок” длины m с диапазоном n. Она будет использоваться при определении методов сортировки специального вида. Сортировка записей R1 : : : RN осуществляется за несколько проходов, а каждый проход состоит из N + n − 1 шагов. На шаге j

при j = 1 − n, 2 − n, : : : ,.N − 1 рассматриваются записи Rj+h[1], Rj+h[2], : : : , Rj+h[m], которые в случае необходимости переставляются так, чтобы их ключи оказались упорядоченными. (Мы говорим,

что Rj+h[1] : : : Rj+h[m] находятся ”под головками чтения-записи”. Если j + h[k] либо < 1, либо > N, то запись Rj+h[k] не рассматривается, иначе говоря, ключи K0, K−1, K−2, : : : считаются равными −1,

a KN+1, KN+2, : : : —равными +1. Поэтому при j −h[m − 1] или j > N − h[2] шаг j тривиален.) Например, в следующей таблице показан один проход сортировки при m = 3, N = 9 и h1 = 1,

h2 = 2, h3 = 4:

j = −3

K−2 K−1 K0 K1 K2 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12

 

 

 

 

3

1

4

5

9

2

6

8

7

 

 

 

 

 

 

j = −2

 

 

 

 

3

1

4

5

9

2

6

8

7

 

 

 

 

 

 

j = −1

 

 

3

1

4

5

9

2

6

8

7

 

 

 

 

 

 

j = 0

1

3

4

5

9

2

6

8

7

 

 

 

 

 

 

j = 1

1

3

4

5

9

2

6

8

7

 

 

 

 

 

 

j = 2

1

3

2

4

9

5

6

8

7

 

 

 

 

 

 

j = 3

1

3

2

4

6

5

9

8

7

 

 

 

 

 

 

j = 4

1

3

2

4

5

6

9

8

7

 

 

 

 

 

 

j = 5

1

3

2

4

5

6

7

8

9

 

 

 

 

 

 

j = 6

1

3

2

4

5

6

7

8

9

 

 

 

 

 

 

j = 7

1

3

2

4

5

6

7

8

9

 

 

 

 

 

 

j = 8

1

3

2

4

5

6

7

8

9

 

 

 

 

 

 

Заметим, что, если m = 2, h1 = 1 и h2 = 2, этот ”многоголовочный” метод сводится к методу пузырька (алгоритм 5.2.2B).

52.[21] (Джеймс Дугунди.) Докажите, что если h[k + 1] = h[k] + 1 при некотором k, 1 k < m, то многоголовочный сортировщик, определенный выше, отсортирует любой входной файл за

конечное число проходов. Но если h[k + 1] h[k] + 2 при 1 k < m, то может случиться, что входная последовательность никогда не станет упорядоченной.

>53. [50] (Армстронг и Нельсон.) Пусть h[k + 1] h[k] + k при 1 k m и N n − 1. Докажите, что в течение первого прохода наибольшие n − 1 элементов всегда займут свои окончательные места. [Указание: используйте принцип нулей и единиц; докажите, что если сортируется последовательность из нулей и единиц, причем единиц меньше n, то все головки могут читать 1 лишь в том случае, когда все нули лежат слева от головок.] Докажите, что если головки удовлетворяют сформулированным условиям, то сортировка будет

закончена не более, чем за d(N − 1)=(n − 1)e проходов. Существует ли входной файл, для которого необходимо ровно столько проходов?

54.[26] Докажите, что при n = N первый проход поместит наименьший ключ в позицию R1 тогда и только тогда, когда h[k + 1] 2h[k], 1 k < m.

Original pages: 218-294 157

55.[34] (Дж. Хопкрофт.) ”Совершенным сортировщиком” N элементов называется многоголовочный сортировщик, который всегда заканчивает работу за один проход. Упражнение 53 доказывает, что последовательность

hh1; h2; h3; h4; : : : ; hmi = D1; 2; 4; 7; : : :; 1 +

2 E

:

 

 

 

 

 

 

m

 

 

 

 

 

m

 

 

 

p

 

 

образует совершенный сортировщик для N =

элементов, используя m = (

8N − 7 + l)=2 го-

2

 

ловок. Например, последовательность головок h1; 2; 4; 7; 11; 16; 22i является совершенным сортировщиком для 22 элементов.

Докажите, что последовательность головок h1; 2; 4; 7; 11; 16; 23iна самом деле будет совершенным сортировщиком для 23 элементов.

56.[49] Определите при заданном m наибольшее N, для которого существует совершенный сортировщик с m головками. Верно ли, что N = O(m2)?

57.[23] (В. Пратт.) Если каждая головка hk находится в положении 2k−1 для 1 k m, то сколько проходов потребуется для сортировки последовательности нулей и единиц z1 z2 : : : z2m−1, где zj = 0 тогда и только тогда, когда j является степенью 2?

58.[24] (Однородная сортировка.) В дереве на рис. 34 в п. 5.3.1 сравнение 2 : 3 выполняется в обоих ветвях уровня 1; а в каждой ветви уровня 2 выполняется сравнение 1 : 3, если только оно не является избыточным. В общем случае мы можем рассмотреть класс алгоритмов сортировки,

однородных именно в этом смысле, предполагая, что M =

N

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

2

 

(a1; b2)(a2; b2): : : (aM ; bM);

 

пар f(a; b) j 1 a < b N g

мы можем последовательно выполнять те из сравнений Ka1 : Kb1, Ka2 : Kb2, : : : , результат которых еще не известен. Каждая из M! расстановок пар (a; b) определяет алгоритм однородной сортировки. Идея однородной сортировки принадлежит X. Л. Бьюсу [JACM,17 (1970), 482–495], в работе которого были предложены ближайшие несколько упражнений.

Для формального определения однородной сортировки удобно воспользоваться теорией графов. Пусть G—направленный граф с вершинами f1; 2; : : : ; N g и без дуг. Для i = 1, 2, : : : , M мы добавляем дуги к G следующим образом:

Случай 1. В G имеется путь от ai к bi. Добавить к G дугу ai ! bi. Случай 2. В G имеется путь от bi к ai. Добавить к G дугу bi ! ai.

Случай 3. В G нет пути ни от ai к bi, ни от bi к ai. Сравнить Kai : Kbi; затем, если Kai Kbi, добавить к G дугу ai ! bi, если же Kai > Kbi, то добавить дугу bi ! ai.

Нас интересует главным образом число сравнений ключей, выполняемых алгоритмом однородной сортировки, а не механизм, с помощью которого действительно устраняются избыточные сравнения; граф G не обязательно строить в явном виде—здесь он используется только для определения однородной сортировки.

Будем также рассматривать ограниченную однородную сортировку, при которой в указанных выше случаях 1–3 учитываются только пути длины 2. (Алгоритм ограниченной сортировки может выполнять некоторые избыточные сравнения, но, как показывает упр. 59, анализ ограниченного случая несколько проще.)

Докажите, что алгоритм ограниченной однородной сортировки совпадает с алгоритмом однородной сортировки, когда последовательность пар лексикографически упорядочена:

(1; 2)(1; 3)(1; 4): : :(1; N)(2; 3)(2; 4): : :(2; N): : :(N − 1; N):

Покажите, что на самом деле оба алгоритма эквивалентны ”быстрой сортировке” (алгоритм 5.2.2Q), если все ключи различны и избыточные сравнения быстрой сортировки устранены, как в упр. 5.2.2- 24. (Не обращайте внимания на порядок, в котором действительно выполняются сравнения в быстрой сортировке; учитывайте только, какие пары ключей сравниваются.)

59.[М38] Для заданной, как в упр. 58, последовательности пар (a1; b1) : : : (aM; bM ) пусть ci будет числом пар (j; k), таких, что j < k < i и (ai; bi), (aj; bj), (ak; bk) образуют треугольник. (a) Докажите,

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

P

равно 1 i M 2=(ci + 2). (b) Используйте результат (a) и упр. 58, чтобы определить среднее число неизбыточных сравнений, выполняемых быстрой сортировкой. (c) Следующая последовательность пар навеяна сортировкой слиянием (но не эквивалентна ей):

(1; 2)(3; 4)(5; 6): : :(1; 3)(1; 4)(2; 3)(2; 4)(5; 7): : :(1; 5)(1; 6)(1; 7)(1; 8)(2; 5) : : :

158 Original pages: 295-318

При однородном методе, основанном на этой последовательности, будет выполняться в среднем больше или меньше сравнений, чем при быстрой сортировке?

60. [М29] Быстрая сортировка производит в наихудшем случае

N

 

2

сравнений. Верно ли, что все

алгоритмы ограниченной однородной сортировки (в смысле упр. 57) выполняют

в наихудшем случае?

N2 сравнений

Picture:

Рис. 61. Устройство, для которого стратегия метода пузырька является опти-

 

мальной.

61.[М48] (X. Л. Бьюс.) Верно ли, что быстрая сортировка имеет минимальное среднее число сравнений среди всех алгоритмов (ограниченной) однородной сортировки?

62.[25] Докторская диссертация Говарда Б. Демута ”Electronic Data Sorting” (Stanford University: October 1956) была, вероятно, первой работой, в которой сколько-нибудь детально рассматривались вопросы сложности вычислений. Демут рассмотрел несколько абстрактных моделей устройств для сортировки и нашел нижние и верхние оценки среднего и максимального времени выполнения, достижимого в каждой модели. Простейшая его модель—”циклическая нереверсивная память” (рис. 61)—станет темой этого упражнения.

Рассмотрим машину, которая сортирует R1 R2 : : : RN за ряд проходов, где каждый проход состоит из следующих N + 1 шагов:

Шаг 1. Установить R R1i. (R—это внутренний регистр машины.) Шаг i. (1 < i N): либо (a) установить Ri−1 R, R Ri;

либо (b) установить Ri−1

Ri, оставляя R неизменным.

Шаг N + 1. Установить RN

R.

Задача состоит в том, чтобы найти такой метод выбора между альтернативами (a) и (b), чтобы минимизировать число проходов, нужных для сортировки.

Докажите, что метод ”пузырька” оптимален для этой модели. Другими словами, покажите, что при стратегии, которая выбирает альтернативу (a), если R Ri, и альтернативу (b), если R > Ri, достигается минимальное число проходов.

5.4. ВНЕШНЯЯ СОРТИРОВКА

Пришло время заняться интересными задачами, возникающими в том случае, когда число сортируемых записей превышает объем быстродействующего оперативного запоминающего устройства. Внешняя сортировка в корне отлична от внутренней (хотя в обоих случаях необходимо расположить записи данного файла в неубывающем порядке), и объясняется это тем, что время доступа к файлам на внешних носителях нас жесточайшим образом лимитирует. Структура данных должна быть такой, чтобы сравнительно медленные периферийные запоминающие устройства (ленты, диски, барабаны и т. д.) могли справиться с потребностями алгоритма сортировки. Поэтому большинство изученных до сих пор методов внутренней сортировки (вставка, обмен, выбор) фактически бесполезно для внешней сортировки; необходимо рассмотреть всю проблему заново.

Предположим, например, что предназначенный для сортировки файл состоит из 5000 записей R1 R2 : : : R5000 длиной по 20 слов (хотя ключи Ki не обязательно такой длины). Как быть, если во внутренней памяти данной машины помещается одновременно только 1000 из этих записей?

Сразу напрашивается такое решение: начать с сортировки каждого из пяти подфайлов R1 : : :

R1000, R1001 : : : R2000, : : :, R4001 : : : R5000 по отдельности и затем слить полученные подфайлы. К счастью, слияние оперирует только очень простыми структурами данных, именно линейными списками, пройти которые можно последовательным образом, как стеки или очереди. Поэтому для слияния годятся самые дешевые внешние запоминающие устройства.

Только что описанный процесс—внутренняя сортировка с последующим ”внешним слиянием”— весьма популярен, и наше изучение внешней сортировки сведется в основном к вариациям на эту тему.

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

Original pages: 295-318 159

Рассмотрим сначала процесс внешней сортировки, использующей в качестве вспомогательной памяти магнитные ленты. Вероятно, простейшим и наиболее привлекательным способом слияния с применением лент служит сбалансированное двухпутевое слияние, в основе которого лежит идея, использовавшаяся ранее в алгоритмах 5.2.4N, S и L. В процессе слияния нам потребуются четыре ”рабочие ленты”. На протяжении первой фазы возрастающие отрезки, получаемые при внутренней сортировке, помещаются поочередно на ленты 1 и 2 до тех пор, пока не исчерпаются исходные данные. Затем ленты 1 и 2 перематываем к началу и сливаем отрезки, находящиеся на этих лентах, получая новые отрезки, вдвое длиннее исходных. Эти новые отрезки записываются по мере их формирования попеременно на ленты 3 и 4. (Если на ленте 1 на один отрезок больше, чем на ленте 2, то предполагается, что лента 2 содержит дополнительный ”фиктивный” отрезок длины 0.) Затем все ленты перематываются к началу и содержимое лент 3 и 4 сливается в удвоенные по длине отрезки, записываемые поочередно на ленты 1 и 2. Процесс продолжается (при этом длина отрезков каждый раз удваивается) до тех пор, пока не останется один отрезок (а именно весь упорядоченный файл). Если после внутренней сортировки было получено S отрезков, причем 2k−1 < S 2k, то процедура сбалансированного двухпутевого слияния произведет ровно k = dlog2 Se проходов по всем данным.

Например, в рассмотренной выше ситуации, когда требуется упорядочить 5000 записей, а объем внутренней памяти составляет 1000 записей, мы имеем S = 5. Начальная распределительная фаза процесса сортировки поместит пять отрезков на ленты следующим образом:

Лента 1

R1 : : : R1000;R2001 : : : R3000;R4001 : : : R5000:

Лента 2

R1001 : : : R2000;R3001

: : :R4000

:

Лента 3

(пустая)

 

(1)

 

 

Лента 4

(пустая)

 

 

После первого прохода слияния на лентах 3 и 4 получатся более длинные отрезки, чем на лентах 1

и 2:

Лента 3 R1 : : : R2000;R4001 : : :R5000:

(2)

Лента 4 R2001 : : : R4000:

В конец ленты 2 неявно добавляется фиктивный отрезок, так что отрезок R4001 : : :R5000 просто копируется на ленту 3. После перемотки всех лент к началу следующий проход по данным приведет к такому результату:

Лента 1 R1 : : : R4000:

(3)

Лента 2 R4001 : : :R5000:

(Отрезок R4001 : : : R5000 снова копируется, но если бы мы начали с 8000 записей, то в этот момент лента 2 содержала бы R4001 : : :R8000.) Наконец, после еще одной перемотки на ленте 3 окажется отрезок R1 : : : R5000, и сортировка закончится.

Сбалансированное слияние легко обобщается на случай T лент для любого T 3. Выберем произвольное число P, такое, что 1 P < T, и разделим T лент на два ”банка”: P лент в левом банке и T − P лент в правом банке. Распределим исходные отрезки как можно равномернее по P лентам левого ”банка”, затем выполним P-путевое слияние слева направо, после этого—(T −P)-путевое слияние справа налево и т. д., пока сортировка не завершится. Обычно значение P лучше всего выбирать равным dT=2e (см. упр. 3, 4).

При T = 4, P = 2имеем частный случай—сбалансированное двухпутевое слияние. Вновь рассмотрим предыдущий пример, используя большее количество лент; положим T = 6 и P = 3. Начальное распределение теперь будет таким:

Лента 1

R1 : : : R1000;R3001 : : : R4000:

 

Лента 2

R1001 : : :R2000

;R4001 : : : R5000:

(4)

Лента 3

R2001 : : :R3000

:

 

Первый проход слияния приведет к

 

 

 

 

Лента 4

R1 : : : R3000:

 

Лента 5

R3001 : : : R5000:

(5)

Лента 6

(пустая)

 

(Предполагается, что на ленте 3 помещен фиктивный отрезок.) На втором проходе слияния работа завершается и отрезки R1 : : :R5000 помещаются на ленту 1. Этот частный случай T = 6 эквивалентен T = 5, так как шестая лента используется лишь при S 7.

160 Original pages: 295-318

Трехпутевое слияние затрачивает фактически несколько больше времени центрального процессора, чем двухпутевое, но оно обычно пренебрежимо мало по сравнению с временем, необходимым для чтения, записи и перемотки ленты; мы довольно хорошо оценим время выполнения сортировки, если примем во внимание только суммарную величину перемещений лент. В предыдущем примере ((4) и (5)) требуются только два прохода по данным в сравнении с тремя проходами при T = 4. Таким образом, слияние при T = 6 займет около двух третей времени по отношению к предыдущему случаю.

Сбалансированное слияние кажется очень простым и естественным. Но если приглядеться внимательнее, то сразу видно, что это не наилучший способ в разобранных выше частных случаях. Вместо того чтобы переходить от (1) к (2) и перематывать все ленты, нам следовало остановить первое слияние, когда ленты 3 и 4 содержали соответственно R1 : : : R2000 и R2001 : : : R4000, а лента 1 была готова к считыванию R4001 : : : R5000. Затем ленты 2, 3, 4 могли быть перемотаны к началу, и сортировка завершилась бы трехпутевым слиянием на ленту 2. Общее число записей, прочитанных с ленты в ходе этой процедуры, составило бы 4000+5000 = 9000 против 5000+5000+5000 = 15000в сбалансированной схеме. Сообразительная машина могла бы постичь и это!

Имея пять отрезков и четыре ленты, можно поступить еще лучше, распределив отрезки следующим образом:

Лента 1

R1 : : :R1000;R3001 : : : R4000:

Лента 2

R1001 : : :R2000

;R4001 : : : R5000:

Лента 3

R2001 : : :R3000

:

Лента 4

(пустая):

 

Теперь, выполнив трехпутевое слияние на ленту 4, затем перемотку лент 3 и 4 с последующим трехпутевым слиянием на ленту 3, можно было бы завершить сортировку, прочитав всего3000+5000 = 8000 записей.

Наконец, если бы мы имели шесть лент, то могли бы, конечно, записать исходные отрезки на ленты 1–5 и закончить сортировку за один проход, выполнив пятипутевое слияние на ленту 6. Рассмотрение этих случаев показывает, что простое сбалансированное слияние не является наилучшим,

ибыло бы интересно поискать улучшенные схемы слияния.

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

Важнейшие схемы слияния обсуждаются в п. 5.4.2—5.4.5. Пока мы не вступим в единоборство с грубой действительностью настоящих лент и реальных сортируемых данных, для нас лучше, изучая характеристики этих схем, иметь весьма наивное представление о ленточной сортировке. Например, можно с легкой душой полагать (как мы делали до сих пор), что первоначальные исходные записи появляются волшебным образом в течение первой распределительной фазы; на самом деле они вероятно, будут занимать одну из наших лент и, быть может, даже целиком заполнят несколько бобин, так как лента не бесконечна! Лучше всего пренебречь подобными техническими деталями до тех пор, пока не будет достигнуто ”академическое” понимание классических схем слияния. Затем в п. 5.4.6 мы ”вернемся на землю”, рассмотрев практические ограничения, которые сильно влияют на выбор схемы слияния. В п. 5.4.6 сравниваются основные схемы слияния из п. 5.4.2—5.4.5 с использованием множества разнообразных предположений, которые встречаются на практике.

Иные подходы к проблеме внешней сортировки, не основанные на слиянии, обсуждаются в п. 5.4.7 и 5.4.8. Наш обзор внешней сортировки заканчивается в п. 5.4.9, где рассматривается важная проблема сортировки на такой памяти, как диски и барабаны.

Упражнения

1.[15] В тексте внешняя сортировка рассматривается после внутренней. Почему нельзя вообще покончить с фазой внутренней сортировки, просто сливая записи во все более и более длинные отрезки прямо с самого начала?

2.[10] Каким будет содержимое лент (аналогичное (1)–(3)), если записи R1 : : : R5000 сортируются с помощью 3-ленточного сбалансированного метода при P = 2? Сравните этот случай со слиянием на 4 лентах; сколько проходов по всем данным будет сделано после первоначального распределения отрезков?

Соседние файлы в папке Дональд Кнут. Искусство программирования. т.3