Проверьте.
Я только коэффициент получу. Делаем через указание автора.
Пусть
- номер шага. Число элементов в массиве равно
.
- число элементов, которые еще ни разу ни с кем не сравнивались
- число элементов, которые может быть могут быть минимальными, но уже не могут быть максимальными
- число элементов, которые может быть могут быть максимальными, но уже не могут быть минимальными
- число элементов, которые уже не могут быть максимальными и не могут быть минимальными
(у
Legioner93 другое описание
)
Далее, автор спрашивает, как меняются эти числа при сравнениях?
Множества элементов будем обозначать
, будем писать
в смысле
, где
Для того, чтобы определить, как могут меняться
надо разобрать все случаи
для
(всего 6 случаев). Каждому сравнению
соответствует преобразование
. Каждому алгоритму, находящему максимум и минимум, соответствует некая последовательность сравнений. Последовательности сравнений соответствует последовательность шагов в пространстве, ведущая из точки
в точку
. Метрика в пространстве
. Нам надо тогда доказать, что для любой последовательности сравнений существует цепочка, состоящая из
шагов.
Разберем все случаи
. Формулы можно выписать явно:
Здесь
, иначе
- нотация Айверсона.
Покажем, что имеет смысл рассматривать только случай, когда все сравнения делаются независимо. Всего 6 типов сравнений. При сравнении с элементами из
у нас нет никакой информации об элементе из
, поэтому значения
при
произвольны. Далее, значение
произвольно, поскольку об
мы знаем лишь то, что
меньше некоторого элемента, который ушел в
, а из
потом уйдет в
, значит в
никогда не попадет, кроме того, как только мы узнаем
, так сразу
уйдет из
в
; аналогично для
; аналогично произвольно
. Т.е. внутри каждого
нет никакой информации на каждом шаге. Наконец, при выборе
для вычисления
не имеет смысла брать те
для которых мы при преобразовании типа
узнали, что
- мы так ничего нового не узнаем, алгоритм выполнит только лишнее действие, множества
не изменятся. А исключая этот факт, значение
в остальном произвольно.
В силу независимости сравнений подберем
в каждом шаге так, чтобы алгоритм работал медленнее всего и шел по самому длинному пути (в преобразованиях 4 и 5 подбираем элементы так, чтобы они не переходили сразу в
). В результате получим следующие векторы преобразований:
Суммируем еще 2-ю и 3-ю координату, выкинем линейно зависимые вектора, получим в 3-хмерном пространстве лишь
. Здесь оптимальный путь единственен -
раз 1-е преобразование и
раз 2-е. При подъеме пути обратно из 3-хмерного в 4-хмерное пространство длина пути сохранится та же. Значит для поиска максимума и минимума в массиве длиной
надо в худшем случае
сравнений, отсюда получаем число сравнений
.
(Оффтоп)
У меня, кстати, Кормен другой, у меня номер упражнения 10.1-2*