iancaple писал(а):
Вот попытаться бы сделать, чтобы при неожиданном прерывании сортировки у Вас результат был максимально вероятный из возможных. Можно хранить и обновлять 2 числовые характеристики каждого элемента, назову их "число побед" и "число поражений". Число побед данного элемента - это число элементов, про которые мы точно знаем, что они "хуже" данного (в этом алгоритме-больше), с каждым благоприятным исходом сравнения оно нарастает не на единицу, а на вес всего поддерева, корнем которого является "проигравший" элемент. Также оно может нарастать, и когда элемент не участвует в сравнении.
А можно эти характеристики и и не обновлять, а после команды на прерывание вытащить из текущего дерева, смотря как оно упаковано (это место в маткаде я не понял). И как-то из них скомпоновать рейтинг элемента.
Если бы Вы как-то доказали Вашу идею математически, я бы взялся написать алгоритм. Без математической сути не ясно, к чему двигаться.
--------
Откатимся несколько назад. Можно рассматривать три вида оптимальных алгоритма:
1. Жадный на ожидаемую негэнтропию
2. Оптимальный по количеству сравнений в наихудшем случае
3. Оптимальный по количеству сравнений в среднем
Риторические вопросы: одинаковы ли эти алгоритмы? чем они отличаются?
Займемся жадным алгоритмом
Mihaylo писал(а):
1) Доказал, что максимум произведения
![$PC_1\cdot PC_2$ $PC_1\cdot PC_2$](https://dxdy-02.korotkov.co.uk/f/1/5/6/15604bb46cc5470c1bfc306f9d993ca882.png)
достигается при
![$PC_1=PC_2=\frac{PC_0}{2}$ $PC_1=PC_2=\frac{PC_0}{2}$](https://dxdy-02.korotkov.co.uk/f/5/4/4/5442895f2dab889f58f19a8e1fa1295f82.png)
. Подтверждаются Ваши слова: максимум 1 бит можно
ожидать от сравнения двух чисел.
Напомню,
![$PC_1$ $PC_1$](https://dxdy-01.korotkov.co.uk/f/8/f/7/8f77fd1305d3fe993fbb2228361e12a982.png)
- количество перестановок в случае, когда результат сравнения
![$a_i<a_j$ $a_i<a_j$](https://dxdy-01.korotkov.co.uk/f/0/b/9/0b92b35729659496fb736879acef719a82.png)
, а
![$PC_2$ $PC_2$](https://dxdy-02.korotkov.co.uk/f/5/d/c/5dc22dd158dcfdaa81c3d47bea06fd0782.png)
- когда результат сравнения противоположный
![$a_i>a_j$ $a_i>a_j$](https://dxdy-04.korotkov.co.uk/f/b/9/3/b937ea7289b7de2cad98ef130f7aaad782.png)
.
Поставим на повестку дня вопрос существования идеального жадного алгоритма, который на каждом шаге добивается 1 бита ожидаемой информации. Рассмотрим сортировку с конца. В конце сортировке граф сравнений представляет собой простую цепь из
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
элементов. Для простоты примем, что
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
является степенью двойки (32, 64, 128, 256 и т.д.). Допустим в конце сортировки реализовался первый исход сравнения, т.е.
![$PC_1=1$ $PC_1=1$](https://dxdy-03.korotkov.co.uk/f/e/9/3/e9355239b839c3847df5e2d465f04d0f82.png)
, соответственно вариант
![$PC_2$ $PC_2$](https://dxdy-02.korotkov.co.uk/f/5/d/c/5dc22dd158dcfdaa81c3d47bea06fd0782.png)
не реализовался. Если доказать, что не существуют варианты сравнения, при котором
![$PC_1=PC_2$ $PC_1=PC_2$](https://dxdy-04.korotkov.co.uk/f/b/e/6/be6e82a0cc7c37c6a75c1367fe97a1a482.png)
, то это будет означать несуществование идеального жадного алгоритма.
Для этого в простой цепи уберем ребро между
![$i$ $i$](https://dxdy-04.korotkov.co.uk/f/7/7/a/77a3b857d53fb44e33b53e4c8b68351a82.png)
-ой и
![$(i+1)$ $(i+1)$](https://dxdy-02.korotkov.co.uk/f/5/c/d/5cd92f0b94ff48a41ce46f35769fb57982.png)
-ой вершиной и посчитаем
![$PC_2$ $PC_2$](https://dxdy-02.korotkov.co.uk/f/5/d/c/5dc22dd158dcfdaa81c3d47bea06fd0782.png)
для того случая, если бы результат сравнения был противоположный. Получено выражение
![$PC_2=\sum\limits_{j=1}^{i}C^{j}_{n-i-1+j}$ $PC_2=\sum\limits_{j=1}^{i}C^{j}_{n-i-1+j}$](https://dxdy-04.korotkov.co.uk/f/b/c/c/bcc981b3daad8a59bd31279bdb69137c82.png)
, которое принимает минимальное значение
![$C^{1}_{n-1}=n-1$ $C^{1}_{n-1}=n-1$](https://dxdy-01.korotkov.co.uk/f/8/c/d/8cd45b4cb762dc9043df9a58e95166a882.png)
при
![$i=1$ $i=1$](https://dxdy-01.korotkov.co.uk/f/0/8/1/081b3265e50f611c00daeffa9193187382.png)
или
![$i=n-1$ $i=n-1$](https://dxdy-03.korotkov.co.uk/f/e/8/0/e80047747cf442a383acfcd0d82a050382.png)
. Таким образом идеальный жадный алгоритм существует только при самом простейшем случае сортировки
![$n=2$ $n=2$](https://dxdy-02.korotkov.co.uk/f/d/a/6/da60d8ce586cf444dfc2735588ee6cab82.png)
. Предельная достижимая негэнтропия на последнем шаге сортировки равна
![$\log_2\frac{n^2}{n^2-2n+2}$ $\log_2\frac{n^2}{n^2-2n+2}$](https://dxdy-03.korotkov.co.uk/f/e/1/8/e1825ee13ba2427e5d0fdf55fe16d72b82.png)
.