Россия, Пошатово |
Рекурсия
7.4.8.
(Для знакомых с основами теории вероятностей). Доказать,
что математическое ожидание числа операций при работе этого
алгоритма не превосходит , причем константа
не зависит от сортируемого массива.
Указание.
Пусть - максимум математического ожидания числа
операций для всех входов длины
. Из текста процедуры
вытекает такое неравенство:
















7.4.9.
Имеется массив из различных целых чисел
и число
. Требуется найти
-ое по величине число
в этом массиве, сделав не более
действий, где
-
некоторая константа, не зависящая от
и
.
Замечание. Сортировка позволяет очевидным образом сделать
это за действий. Очевидный способ: найти
наименьший элемент, затем найти второй, затем
третий,
-ый требует порядка
действий,
то есть не годится (константа при
зависит от
).
Указание. Изящный (хотя практически и бесполезный - константы слишком велики) способ сделать это таков:
А. Разобьем наш массив на групп, в каждой из
которых по
элементов. Каждую группу упорядочим.
Б. Рассмотрим средние элементы всех групп и перепишем
их в массив из элементов. С помощью рекурсивного
вызова найдем средний по величине элемент этого массива.
В. Сравним этот элемент со всеми элементами исходного
массива: они разделятся на большие его и меньшие его
(и один равный ему). Подсчитав количество тех и других, мы
узнаем, в какой из этих частей должен находится искомый
( -ый) элемент и каков он там по порядку.
Г. Применим рекурсивно наш алгоритм к выбранной части.
Пусть - максимально возможное число действий, если
этот способ применять к массивам из не более
чем
элементов (
может быть каким угодно). Имеем
оценку:








Теперь по индукции можно доказать оценку
(решающую роль при этом играет то обстоятельство, что
).