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


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




[60]

Randomized-Select(A,p, г, г)

1if р = г

2then return А\р]

3q <- Randomized-Partition(A,p, г)

4/г <- q - р + 1

5if г /г

6then return Randomized-Select(A,р, q, г)

7else return Randomized-Select(A, g + 1, г, г -/г)

После исполнения процедуры Randomized-Partition в строке 3 массив А\р .. г] состоит из двух непустых частей А\р .. q] и A[q + l..r], причём всякий элемент А[р..д] меньше всякого элемента А[д+1.. г]. В строке 4 вычисляется количество элементов в массиве А\р. .q]. Дальнейшее зависит от того, в каком из этих двух массивов лежит г-ж по величине элемент массива А\р. .г]. Если г к, то нужный нам элемент лежит в левой части (массиве А\р . .q]), откуда и извлекается в результате (рекурсивного) вызова Randomized-Select в строке 6. Если же i > к, то все к элементов левой части (А[р..д]) заведомо меньше искомого, который можно найти как [г - к)-ж по счёту элемент массива A[q + 1. .г] (строка 7).

Время работы алгоритма Randomized-Select (с учётом времени работы процедуры Randomized-Partition) в худшем случае есть 0(га2), даже если мы ищем всего лишь минимум: в самом деле, при особом невезении может оказаться, что мы все время разбиваем массив возле наибольшего оставшегося элемента. Однако случайный выбор гарантирует, что для любого входа среднее время работы алгоритма будет невелико.

Докажем это. Рассмотрим для каждой из возможных перестановок п элементов математическое ожидание времени работы алгоритма (среднее по всем случайным выборам). Пусть Т(п) - максимальное из этих ожиданий. Как мы отмечали в разделе 8.4, после вызова Randomized-Partition левая часть разбиения содержит 1 элемент с вероятностью 2/га, и содержит г > 1 элементов с вероятностью 1/га для любого г от 2 до га - 1. Можно считать, что Т(п) монотонно возрастает с ростом га (если это не так, заменим Т(п) на Г(га) = тах1гга Г(г) и повторим все рассуждения для Г). Заметим, что худшим случаем будет тот, когда г-ж по счёту элемент попадает в большую из двух половин, на которые разбивается мае-


Глава 10 Медианы и порядковые статистики сив. Отсюда имеем:

Т(га) - [r(max(l, га - 1)) + Т(тах(/г, га - к))\ + О

к=1

п-1

- Т(га-1) + 2Т(к) +0

га ,

к=\п/2] п-1

= - Е пк)+о(П)

к=\п/2]

(мы сгруппировали одинаковые слагаемые при переходе от первой строки ко второй и отбросили Т(п - 1)/га при переходе от второй строки к третьей, так как в худшем случае Т(п - 1) = О (га2), и тем самым слагаемое Г(га - 1)/га можно включить в О(га)).

Теперь докажем, что Т(п) era, рассуждая по индукции (как выбрать с, мы скажем после). В самом деле, пусть неравенство T(j) cj верно для всех j < га. Тогда, используя формулу для суммы арифметической прогрессии, получаем, что

2 п~Х

Т(п) <С -ск + 0(п)

к=\п/2]

2с га га/2 + 1 + га - 1

< - • - •--Ь С га

га 22V 7

Зсга

= - + О(га) era,

если выбрать с столь большим, чтобы с/4 превосходило константу, подразумеваемую в слагаемом О (га).

Стало быть, любая порядковая статистика, и медиана в том числе, может быть найдена за линейное в среднем время.

Упражнения

10.2-1 Напишите версию процедуры Randomized-Select, не использующую рекурсии.

10.2-2 Предположим, что мы используем алгоритм Randomized-Select для выбора наименьшего элемента из массива А = (3,2,9,0,7,5,4,8,6,1). Опишите последовательность разбиений, соответствующую худшему случаю.

10.2-3 Будет ли алгоритм Randomized-Select правильно работать, если в массиве А есть равные элементы (как мы помним, в этом случае процедура Randomized-Partition разбивает А\р. .г]


на части А\р .. q] и A[q + 1.. г] таким образом, что всякий элемент А\р .. q] не превосходит всякого элемента A[q + 1.. г])?

10.3. Выбор за линейное в худшем случае время

Теперь рассмотрим (детерминированный) алгоритм Select, решающий задачу о порядковых статистиках за время О (га) в худшем случае. Как и Randomized-Select, этот алгоритм основан на последовательном разбиении массива на меньшие части; в данном случае, однако, мы гарантируем, что выбранное разбиение не является неудачным. Алгоритм Select использует (детерминированную) процедуру Partition (см. описание алгоритма быстрой сортировки в разд. 8.1), модифицированную таким образом, чтобы элемент, с которым сравнивают, задавался как параметр.

Алгоритм Select находит г-ж по порядку элемент в массиве размера га > 1 следующим образом:

1.Разбить га элементов массива на [п/5\ групп по 5 элементов и (возможно) одну группу, в которой менее пяти элементов.

2.Найти медиану каждой из [~га/5] групп (для чего отсортировать группу вставками).

3.Вызвав (рекурсивно) процедуру Select, найти число ж, являющееся медианой найденных [~га/5] медиан.

4.Вызвав модифицированную процедуру Partition, разбить массив относительно найденной «медианы медиан». Пусть к - количество элементов в нижней части этого разбиения (в верхней части, стало быть, n - k).

5.Вызвав (рекурсивно) процедуру Select, найти г-ую порядковую статистику нижней части разбиения, если i . к, или (i - k)-ю порядковую статистику верхней части разбиения, если г > к.

Оценим время работы алгоритма Select. Для начала выясним, сколько чисел заведомо будут больше «медианы медиан» ж (см. рис. 10.1). Не менее половины медиан, найденных на втором шаге, будут больше или равны ж. Стало быть, по крайней мере половина из [~га/5] групп даст по три числа, больших ж, за двумя возможными исключениями: группа, содержащая ж, и последняя неполная группа. Тем самым имеется не менее

Зга

>--6.

10

элементов, заведомо больших ж, и точно так же получаем, что имеется не менее Зга/10 - 6 элементов, заведомо меньших ж. Значит, алгоритм Select, рекурсивно вызываемый на пятом шаге, будет обрабатывать массив длиной не более 7га/10 + 6.

"1

"га"

2

5



[стр.Начало] [стр.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]