Проверьте.
Я только коэффициент получу. Делаем через указание автора.
Пусть

- номер шага. Число элементов в массиве равно

.

- число элементов, которые еще ни разу ни с кем не сравнивались

- число элементов, которые может быть могут быть минимальными, но уже не могут быть максимальными

- число элементов, которые может быть могут быть максимальными, но уже не могут быть минимальными

- число элементов, которые уже не могут быть максимальными и не могут быть минимальными
(у
Legioner93 другое описание

)
Далее, автор спрашивает, как меняются эти числа при сравнениях?
Множества элементов будем обозначать

, будем писать

в смысле

, где

Для того, чтобы определить, как могут меняться

надо разобрать все случаи

для

(всего 6 случаев). Каждому сравнению

соответствует преобразование

. Каждому алгоритму, находящему максимум и минимум, соответствует некая последовательность сравнений. Последовательности сравнений соответствует последовательность шагов в пространстве, ведущая из точки

в точку

. Метрика в пространстве

. Нам надо тогда доказать, что для любой последовательности сравнений существует цепочка, состоящая из

шагов.
Разберем все случаи

. Формулы можно выписать явно:



![$$4. \ x_A*y_B \to\left{
\begin{cases}
a_{k+1}=a_k -1\\
b_{k+1}=b_k+[x_A>y_B] \\
c_{k+1}=c_k \\
d_{k+1}=d_k+[x_A<y_B]
\end{cases}$$ $$4. \ x_A*y_B \to\left{
\begin{cases}
a_{k+1}=a_k -1\\
b_{k+1}=b_k+[x_A>y_B] \\
c_{k+1}=c_k \\
d_{k+1}=d_k+[x_A<y_B]
\end{cases}$$](https://dxdy-04.korotkov.co.uk/f/f/3/b/f3b7c4914da41bc7b79239006dfec98582.png)
![$$5. \ x_A*y_C \to\left{
\begin{cases}
a_{k+1}=a_k-1 \\
b_{k+1}=b_k \\
c_{k+1}=c_k+[x_A<y_C] \\
d_{k+1}=d_k+[x_A>y_C]
\end{cases}$$ $$5. \ x_A*y_C \to\left{
\begin{cases}
a_{k+1}=a_k-1 \\
b_{k+1}=b_k \\
c_{k+1}=c_k+[x_A<y_C] \\
d_{k+1}=d_k+[x_A>y_C]
\end{cases}$$](https://dxdy-04.korotkov.co.uk/f/f/c/c/fccac8d6fd6eda7c860cb0399c5548c882.png)
![$$6. \ x_B*y_C \to\left{
\begin{cases}
a_{k+1}=a_k \\
b_{k+1}=b_k-[x_C<y_B] \\
c_{k+1}=c_k-[x_C<y_B] \\
d_{k+1}=d_k+2[x_C<y_B]
\end{cases}$$ $$6. \ x_B*y_C \to\left{
\begin{cases}
a_{k+1}=a_k \\
b_{k+1}=b_k-[x_C<y_B] \\
c_{k+1}=c_k-[x_C<y_B] \\
d_{k+1}=d_k+2[x_C<y_B]
\end{cases}$$](https://dxdy-04.korotkov.co.uk/f/7/a/6/7a687f1ece8a33b3cae6c1a2b2cd43cc82.png)
Здесь
![$[x_M<y_N]=1 \Leftrightarrow x_M<y_N$ $[x_M<y_N]=1 \Leftrightarrow x_M<y_N$](https://dxdy-04.korotkov.co.uk/f/b/e/5/be5ca42ce0e45ab726dc671f1d0ed0d482.png)
, иначе
![$[x_M<y_N]=0$ $[x_M<y_N]=0$](https://dxdy-04.korotkov.co.uk/f/b/9/2/b92be5cf2ef26b3dbd731ac50edbbf5d82.png)
- нотация Айверсона.
Покажем, что имеет смысл рассматривать только случай, когда все сравнения делаются независимо. Всего 6 типов сравнений. При сравнении с элементами из

у нас нет никакой информации об элементе из

, поэтому значения
![$[x_M<y_N]$ $[x_M<y_N]$](https://dxdy-02.korotkov.co.uk/f/9/6/6/966970901bb3fee5316212ea7457439582.png)
при

произвольны. Далее, значение
![$[x_B<y_B]$ $[x_B<y_B]$](https://dxdy-04.korotkov.co.uk/f/7/b/6/7b634c44c87602d0d62d0b7e56b34b7282.png)
произвольно, поскольку об

мы знаем лишь то, что

меньше некоторого элемента, который ушел в

, а из

потом уйдет в

, значит в

никогда не попадет, кроме того, как только мы узнаем
![$[x_B<y_B]$ $[x_B<y_B]$](https://dxdy-04.korotkov.co.uk/f/7/b/6/7b634c44c87602d0d62d0b7e56b34b7282.png)
, так сразу

уйдет из

в

; аналогично для

; аналогично произвольно
![$[x_C<y_C]$ $[x_C<y_C]$](https://dxdy-01.korotkov.co.uk/f/4/8/1/481ef30f015d9da7280edb8d0e058b7482.png)
. Т.е. внутри каждого

нет никакой информации на каждом шаге. Наконец, при выборе

для вычисления
![$[x_C<y_B]$ $[x_C<y_B]$](https://dxdy-02.korotkov.co.uk/f/d/0/3/d03a8eaa30e69bbd56ee146ca75dc15782.png)
не имеет смысла брать те

для которых мы при преобразовании типа

узнали, что

- мы так ничего нового не узнаем, алгоритм выполнит только лишнее действие, множества

не изменятся. А исключая этот факт, значение
![$[x_C<y_B]$ $[x_C<y_B]$](https://dxdy-02.korotkov.co.uk/f/d/0/3/d03a8eaa30e69bbd56ee146ca75dc15782.png)
в остальном произвольно.
В силу независимости сравнений подберем

в каждом шаге так, чтобы алгоритм работал медленнее всего и шел по самому длинному пути (в преобразованиях 4 и 5 подбираем элементы так, чтобы они не переходили сразу в

). В результате получим следующие векторы преобразований:






Суммируем еще 2-ю и 3-ю координату, выкинем линейно зависимые вектора, получим в 3-хмерном пространстве лишь

. Здесь оптимальный путь единственен -

раз 1-е преобразование и

раз 2-е. При подъеме пути обратно из 3-хмерного в 4-хмерное пространство длина пути сохранится та же. Значит для поиска максимума и минимума в массиве длиной

надо в худшем случае

сравнений, отсюда получаем число сравнений

.
(Оффтоп)
У меня, кстати, Кормен другой, у меня номер упражнения 10.1-2*