11.07.2015 Views

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

Выпуск 1 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ПРОФИЛЬ16январь 2012 / ИНФорматикаСитуация меняется, если нам нужно многократновыполнять операцию поиска для одних и тех же данных(так, как правило, бывает при работе с базамиданных). Тогда имеет смысл заранее отсор тироватьмассив (применить “предварительную обработкуданных”), а затем, используя двоичный поиск, экономитьвремя при каждом новом поисковом запросе.Алгоритмы сортировкиРанее мы проанализировали один из простых методовсортировки массивов — метод прямого выбора,и выяснили, что его асимптотическая сложностьO(n 2 ). Повторим анализ для метода “пузырька”, которыйтакже изучался в 10-м классе:нц для i от 1 до n-1нц для j от n-1 до i шаг -1если A[j] > A[j+1] тоc:= A[j]; A[j]:= A[j+1]; A[j+1]:= c;всекцкцНа первом шаге основного цикла выполняетсяn – 1 шагов внутреннего цикла, то есть n – 1 сравнений.Далее количество сравнений уменьшаетсядо 1, так что общее количество сравнений равноT ( n) = ( n − 1) + ( n − 2) + ... + 2 + 1 =c( −1) 1 2 1n n ,n n= = −2 2 2так же, как и у алгоритма прямого выбора. В то жевремя в худшем случае при каждом сравнении выполняетсяперестановка, что требуетn( n −1) 3 32 2 22Tp( n) = 3⋅ = n − nопераций присваивания. Таким образом, этот алгоритмимеет асимптотическую сложность O(n 2 )как по числу сравнений, так и по числу присваиваний.Существуют ли более эффективные сортировки,имеющие, например, линейную сложность? Да, длянекоторых особых случаев существуют. Например,если известно, что все значения исходного массиванаходятся в интервале от 1 до некоторого значенияMAX, можно использовать сортировку подсчетом.Для этого выделяется дополнительный массив счетчиковцел C[1:MAX]который предварительно обнуляется:нц для i от 1 до MAXC[i]:= 0кцЗатем в цикле проходим весь массив с данными,и для каждого элемента A[i] увеличиваем счетчикC[A[i]]. Например, если A[i]=20, счетчик C[20]увеличивается на 1. После окончания цикла в каждомсчетчике C[i] находится количество значенийисходного массива, равных i.нц для i от 1 до nC[A[i]]:= C[A[i]] + 1кцТеперь остается расставить их в массиве A в нужномколичестве. Например. Если C[20]=5, а значений,меньших 20, нет, в массив A записывается последовательно5 значений, равных 20:k:= 1нц для i от 1 до MAXнц для j от 1 до C[i]A[k]:= ik:= k + 1кцкцПопробуем подсчитать количество операций дляэтого алгоритма. Заполнение массива C нулямитребует MAX присваиваний. Цикл подсчета элементовсодержит n сложений и присваиваний, то естьего сложность — линейная, O(n). Наконец, последнийвложенный цикл выполняет также n сложенийи присваиваний (по числу элементов массива A),поэтому алгоритм в целом имеет линейную сложностьпо n.Однако нужно учитывать, что принципиальноеускорение алгоритма в сравнении с предыдущимиполучено за счет того, что• все значения — целые числа в ограниченномдиапазоне;• есть возможность использовать дополнительныймассив размером MAX, который может значительнопревышать размер исходного массива.Здесь проявляется компромисс “скорость – память”,который присутствует во многих задачах:ускорение алгоритма возможно за счет использованиядополнительной памяти и наоборот, экономияпамяти приводит к замедлению работы алгоритма.Доказано, что в общем случае вычислительнаясложность сортировки, основанной только на использованииопераций “сравнить” и “переставить”,не может быть меньше, чем O(nlogn). Именно такуюсложность имеют, например, сортировка слиянием(англ. Merge sort) и пирамидальная сортировка(англ. Heap sort), которые применяются при работес большими наборами данных. Быстрая сортировка(англ. Quick sort), которая изучалась в 10-м классе,в среднем тоже имеет сложность O(n logn), однаков худшем случае (когда на каждом шаге массивделится на две части, одна из которых состоит изодного элемента) требуется O(n 2 ) обменов.Контрольные вопросы1. Какие критерии используются для оценки качестваалгоритмов?2. Почему скорость работы алгоритма оцениваетсяне временем выполнения, а количеством элементарныхопераций?3. Как учитывается размер данных при оценкескорости алгоритма?

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!