6. Разделяй и владей - намиране на k-тия по големина елемент [7.1] - 11.11.2003

* Принципи на "разделяй и владей": разбиване на изходната задача на няколко подзадачи (разделяй), решаване на подзадачите и конструиране на решение на изходната задача (владей).

* Пример с двоично търсене.

* Намиране на максимален елемент (първия по големина) - n - 1 сравнения, n присвоявания в най-лошия случай, 1 присвояване в най-добрия случай, средния брой присвоявания е от порядък O(log n).

* Едновременно намиране на минимален и максимален елемент (първия и последния по големина) - 3n/2 сравнения ! Сравняваме 2 съседни елемента, по-големия го сравняване за max, а по-малкия - за min.

* Пълно сортиране - най-добрите алгоритми са O(n log n).

* Бързо сортиране с разделяне на дялове (Хоор, "разделяй и владей") - O(n2) в най-лошия случай, O(n) в най-добрия случай, O(n log n) средно. Сложността зависи от избора на елемент за разделяне на дялове.

* Когато търсим k-тия по големина елемент няма нужда да обработваме и двата дяла - отново O(n2) в най-лошия случай.

* Метод на Блум, Флойд, Прат, Ривест и Тарджан.
   - Нека имаме метод M за намиране на k-тия по големина елемент с 28n сравнения.
   - Медиана - елемент на масив, който се намира на позиция n/2 в сортирания масив.
   - Търсене на медиана на медианите:
        1. Разделяме масива на групи по 7 елемента.
        2. Сортираме всяка група и намираме медианата й (третия елемент) чрез сортиране по метода на мехурчето (или друг квадратичен метод).
        3. Намираме медианата на медианите по метод M (рекурсивно!).
    - Разделянато на дялове извършваме с така намерената медиана на медианите.
    - Оценка на метода (7(7-1)/2)(n/7) + 28(n/7) + 28(5n/7) = 3n +  4n + 20n = 27n (при всяко рекурсивно извикване областта намалява с поне 2n/7 елемента), т.е. предположението за 28n сравнения е вярно.

* Метод на Дур и Цвик [1995] - 2.95n сравнения, [2001] - (2+epsilon).n сравнения.

Допълнителна литература: [3] Лендерт Амерал, 3.12.