Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algorithms.doc
Скачиваний:
29
Добавлен:
06.12.2018
Размер:
9.73 Mб
Скачать
      1. Поиск порядковой статистики за время (n) в худшем случае

Зададимся целью написать алгоритм нахождения k-ой порядковой статистики, требующий (N) операций в худшем случае. Это было бы возможным, если бы в алгоритме QFindStatP на каждом этапе разбиения множества на две части мы бы получали части размером не менее sL, где L – длина разбиваемой части множества, s<1. Для этой цели мы построим алгоритм QFindStat5, который перед разбиением множества на две части разбивает его на пятерки последовательных элементов, в каждой пятерке ищет медиану и на полученном множестве медиан пятерок чисел запускает самого себя для поиска медианы полученного множества. Полученную медиану медиан x алгоритм использует для разбиения множества на две части, состоящих, соответственно, из элементов меньше или равных x, и из элементов больше или равных x. Далее, в зависимости от k, следует применить QFindStat5 к одной из полученных половин множества.

QFindStat5(A,1,N,k)

Если N 5 то найти медиану x любым методом; return x

Разбить массив A[1…N] на пятерки элементов и

отсортировать элементы внутри пятерок

x= QFindStat5 (A,1,[(N+4)/5], ([(N+4)/5]+1)/2), где A – массив медиан пятерок

Выполнить один шаг QuickSortP для псевдомедианы x

=> массив разбит на куски длиной L и N-L

Если k L то return QFindStat5 (A,1,L,k)

иначе return QFindStat5 (A,L+1,N,k)

Теорема. Время работы алгоритма QFindStat5 равно (N), где N – количество элементов в обрабатываемом массиве.

Доказательство. В массиве медиан пятерок [(N+4)/5] элементов. Нахождение медианы x этого множества гарантирует, что в каждой пятерке справа от x , включая пятерку с x (см. рисунок ниже), и кроме последней пятерки, 3 элемента больше или равны x (на рисунке эти элементы выделены серой областью). Количество всех указанных пятерок не менее [([(N+4)/5]+1)/2], последняя пятерка может быть не полной и в ней, в худшем случае, может быть всего один элемент больше или равный x. Если теперь исключить из описанного множества x, то получается, что мы имеем 3[([(N+4)/5]+1)/2] - 3 элементов больше или равных x. Легко показать, что такое же количество элементов меньше или равны x. Т.о. после выполнения одного шага QuickSortP останется не более N - 3[([(N+4)/5]+1)/2] + 3 N – 3N/10 + 3 = 7N/10 + 3 элементов.

Оценим время выполнения алгоритма QFindStat5 : T(N). Оно складывается из времени поиска медианы медиан пятерок элементов (T([(N+4)/5])), времени поиска медианы в отрезанном куске множества длиной не более 7N/10 + 3 (T(7N/10 + 3)) и всего остального (O(N)).

T(N) T(N/5+1) + T(7N/10 + 3) + O(N)

Теперь, если предположить, что T(i) c i, для i<N, то получим

T(N) с(N/5+1) + с(7N/10 + 3) + O(N) с( 9N/10 + 4 ) + O(N) =

= сN + (O(N) – c(N/10 - 4))

Выбрав достаточно большое c получим, что для N>40

O(N) – c(N/10 - 4) 0

Далее, выбрав еще большее c можно получить, что для N40

T(N) сN

Т.о. мы получим, что T(N) сN для любого N.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]