Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algorithms-2010.doc
Скачиваний:
33
Добавлен:
06.12.2018
Размер:
9.83 Mб
Скачать

Лекция 5 Алгоритмы. Сведение алгоритмов.

Д.Кнут. Искусство программирования для ЭВМ. тт 1-3. Москва. Мир. 1996-1998

Т.Кормен, Ч.Лейзерсон, Р.Ривест. Алгоритмы. Построение и анализ. Москва. МЦНМО. 1999.

Препарата Ф., Шеймос М. Вычислительная геометрия. Москва. Мир. 1989

Порядковые статистики.

Определение. Медианой множества А = {a1 ,…, aN } называется элемент с индексом (N+1)/2 в отсортированном по возрастанию множестве А.

Определение. k-той порядковой статистикой множества из N вещественных чисел A={A1,…, AN} называется k-тое число в упорядоченном множестве A. Легко увидеть, что [(N+1)/2]-ая порядковая статистика является медианой множества. В свою очередь, если бы мы могли эффективно искать медиану множества, то это дало бы хорошую модификацию алгоритма QuickSort.

Из предыдущей главы следует, что верхней оценкой времени поиска k-той порядковой статистикой является O(N log2 N). Оказывается, что эту оценку можно улучшить.

Поиск порядковой статистики за время (n) в среднем

Для поиска порядковых статистик можно, практически один в один, применять алгоритм QuickSort с единственной модификацией: после каждого деления массива на две части мы можем точно сказать, в какой из них лежит искомая k-тая порядковая статистика, поэтому другую половину можно далее не рассматривать.

QFindStatP (A,p,q,k,N)

Если q-p < 1 то return Ap

Вечный цикл

i=p; j=q;

Поменять местами Ap и случайно выбранный элемент Al , где p l q

x=Ai

Пока A i < x : i + +;

Пока A j > x : j - -;

Если i < j то

поменять местами A i и A j ;

иначе

{Если k j

то return QFindStatP (A, p, j, k,N )

иначе return QFindStatP (A, j+1, q, k,N )

}

i + +; j - -;

Конец вечного цикла

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

Доказательство. После каждого разбиения массива на две части длина самой большой из двух образовавшихся половин оказывается меньше либо равной длине разбиваемого массива –1. Поэтому на каждой ветви алгоритма будет не более N узлов (разбиений массива). На каждом уровне дерева разбиений присутствуют не более N элементов, по которым производится поиск, поэтому суммарное время работы на одном уровне дерева равно O( N ). Итого, суммарное время работы алгоритма равно O( N ) * N = O( N 2).

Данная оценка достижима на массиве {1, …, N-1,N} при поиске, например, N-ой порядковой статистики и при том, что в качестве псевдомедианы каждый раз будет выбираться первый элемент в подмассиве.

Теорема. Среднее время работы алгоритма QFindStatP равно (N), где N – количество элементов в обрабатываемом массиве. Под средним временем подразумевается среднее время по всем перестановкам любого массива входных данных длины N.

Доказательство. Выпишем рекуррентное соотношение на среднее время работы алгоритма

T(N) [ T( N-1 ) + i=2iN MAX(T( i-1 ), T( N-i+1 )) ]/N + O(N) =

= [ T( N -1) + i=1i<N MAX(T( i ), T( N-i )) ]/N + O(N)

[ T( N -1) + 2i=N/2i<N T( i ) ]/N + O(N)

[ 2 i= N/2i<N T( i ) ]/N + O(N)

Предположим, для i<N верно:

T( i )<a i + c для некоторых a>0, c>0 ,

тогда задача сводится к нахождению таких a>0, c>0 , что для них всегда бы выполнялось соотношение

[ 2 i= N/2i<N T( i ) ]/N + O(N) < a N + c

Итак

T(N) [ 2 i= N/2i<N T( i ) ]/N + O(N) a 3/4 * N + c + O(N)

Осталось взять такое большое a, что a 3/4 * N + O(N) < a N , после чего мы получаем T(N) = O(N). Осталось заметить, что первое же разбиение массива на две части (а в лучшем случае оно же будет и последним) требует времени (N), из чего мы получаем, что T(N) =(N).

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