Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[55]

Теорема 9.1. Высота любого разрешающего дерева, сортирующего га элементов, есть fi(ralgra).

Доказательство. Поскольку среди листьев разрешающего дерева должны быть представлены все перестановки га элементов, число этих листьев не менее га!. Поскольку двоичное дерево высоты h имеет не более 2h листьев, имеем га! 2h. Логарифмируя это неравенство по основанию 2 и пользуясь неравенством га! > (п/е)п, вытекающим из формулы Стирлинга (2.11), получаем, что

h га lg га - га lg е = Q (га lg га),

что и утверждалось.□

Следствие 9.2. Алгоритмы сортировки слиянием и с помощью кучи асимптотически оптимальны.

Доказательство. Они работают за время О (га lgra); в силу доказанной теоремы, эта оценка асимптотически неулучшаема. □

Упражнения

9.1-1 Какова наименьшая возможная глубина листа в разрешающем дереве алгоритма сортировки?

9.1-2 Докажите асимптотически точную оценку для lg(ra!) = ~Yk=i lg к без формулы Стирлинга, используя методы разд. 3.2.

9.1-3 Покажите, что не существует алгоритма сортировки, основанного на сравнениях, который работал бы за линейное время для половины из га! возможных входных последовательностей длины га. Как изменится ответ, если в этой задаче заменить 1/2 на 1/га? На 1/2п?

9.1-4 Профессор разработал компьютер, который поддерживает «тройные ветвления»: после одного-единственного сравнения аг- : aj управление может быть передано в одно из трёх мест программы, в зависимости от того, какое из соотношений выполнено: аг- < aj, аг- = aj или аг- > aj. Он надеется, что благодаря таким сравнениям сортировку га элементов можно провести асимптотически быстрее, чем за время fi(ralgra). Покажите, что профессор заблуждается.

9.1-5 Покажите, что для слияния двух отсортированных последовательностей из га элементов достаточно 2га - 1 сравнений в худшем случае.

9.1-6 Последовательность из га элементов, которую необходимо отсортировать, разбита на участки длины к. При этом любой элемент первого участка меньше любого элемента второго и т. д. (так


что остаётся лишь отсортировать элементы внутри участков). Покажите, что такая сортировка потребует не менее Q(nlgk) сравнений в худшем случае. (Указание: недостаточно сослаться на необходимость п/k раз сортировать участок длиной к.)

9.2. Сортировка подсчётом

Алгоритм сортировки подсчётом (counting sort) применим, если каждый из п элементов сортируемой последовательности - целое положительное число в известном диапазоне (не превосходящее заранее известного к). Если к = О(п), то алгоритм сортировки подсчётом работает за время О(п).

Идея этого алгоритма в том, чтобы для каждого элемента ж предварительно подсчитать, сколько элементов входной последовательности меньше ж, после чего записать ж напрямую в выходной массив в соответствии с этим числом (если, скажем, 17 элементов входного массива меньше ж, то в выходном массиве ж должен быть записан на место номер 18). Если в сортируемой последовательности могут присутствовать равные числа, эту схему надо слегка модифицировать, чтобы не записать несколько чисел на одно место.

В приводимом ниже псевдокоде используется вспомогательный массив С[1. .к] из к элементов. Входная последовательность записана в массиве А[1..п], отсортированная последовательность записывается в массив В[1. .п].

Counting-Sort(A, В, к)

1for г +- 1 to к

2do СИ <- О

3for j f- 1 to length[A]

4do C[A[j]]C[A[j]] + l

5> C[i] равно количеству элементов, равных г.

6for г +- 2 to к

7do СИ <- СИ + C[i - 1]

8> C[i] равно количеству элементов, не превосходящих г

9for j f- length[A] downto 1

10do B[C[A[j]]] <- A[j]

11C[A[j]] f- C[A[j]] - 1

Работа алгоритма сортировки подсчётом проиллюстрирована на рис. 9.2. После инициализации (строки 1-2) мы сначала помещаем в C[i] количество элементов массива А, равных г (строки 3-4), а затем, находя частичные суммы последовательности С[1], С [2],..., С [к], - количество элементов, не превосходящих г (строки 6-7). Наконец, в строках 9-11 каждый из элементов мае-


Рис. 9.2 Работа алгоритма counting-sort, применённого к массиву А[1. . 8], состоящему из натуральных чисел, не превосходящих к = 6. (а) Массив А и вспомогательный массив С после выполнения цикла в строках 3-4. (б) Массив С после выполнения цикла в строках 6-7. (в-д) Выходной массив В и вспомогательный массив С после одного, двух и трёх повторений цикла в строках 9-11. Зачернённые клетки соответствуют элементам массива, значения которым ещё не присвоены, (е) Массив В после окончания работы алгоритма.

сива А помещается на нужное место в массиве В. В самом деле, если все п элементов различны, то в отсортированном массиве число A[j] должно стоять на месте номер C[A[j]], ибо именно столько элементов массива А не превосходят A[j]; если в массиве А встречаются повторения, то после каждой записи числа A[j] в массив В число C[A[j]] уменьшается на единицу (строка 11), так что при следующей встрече с числом, равным A[j], оно будет записано на одну позицию левее.

Оценим время работы алгоритма сортировки подсчётом. Циклы в строках 1-2 и 6-7 работают за время О (к), циклы в строках 3-4 и 10-11 - за время О(п), а весь алгоритм, стало быть, работает за время О (к + п). Если к = О(п), то время работы есть О(п).

Для алгоритма сортировки подсчётом нижняя оценка разд. 9.1 - не препятствие, поскольку он не сравнивает сортируемые числа между собой, а использует их в качестве индексов массива.

Алгоритм сортировки подсчётом обладает важным свойством, называемым устойчивостью (it is stable). Именно, если во входном массиве присутствует несколько равных чисел, то в выходном массиве они стоят в том же порядке, что и во входном. Это свойство не имеет смысла, если в массиве записаны только числа сами по себе, но если вместе с числами записаны дополнительные данные, это оказывается важным. Более точно, представим себе, что мы сортируем не просто числа, а пары (t, ж), где t - число от 1 до к, а ж - произвольный объект, и хотим переставить их так, чтобы первые компоненты пар шли в неубывающем порядке. Описанный



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]