Медиана медианы алгоритма: зачем делить массив на блоки размером 5

в алгоритме медианы медианы нам нужно разделить массив на куски размером 5. Мне интересно, как изобретатели алгоритмов придумали магическое число "5", а не, может быть, 7 или 9 или что-то еще?

3 ответов


Я думаю, что если вы проверите раздел" доказательство O(n) времени работы " страницы wiki для медианы-из-медиан алгоритм:

средний-расчет рекурсивного вызова не превышает в худшем случае линейного поведения, потому что список медиан составляет 20% от размера списка, в то время как другой рекурсивный вызов повторяется на более 70% из списка, делая время

Image

термин O(n) C n предназначен для работы разбиения (мы посетили каждый элемент постоянное количество раз, чтобы сформировать их в n/5 групп и взять каждую медиану в O(1) раз). Из этого, используя индукцию, можно показать, что

Image

Это должно помочь вам понять, почему.


число должно быть больше 3 (и нечетное число, очевидно) для алгоритма. 5-наименьшее нечетное число, большее 3. Так 5 был выбран.


вы также можете использовать блоки размером 3 или 4, как показано в статье Выберите с группами из 3 или 4 К. Чен и А. Думитреску (2015). Идея состоит в том, чтобы использовать алгоритм" медианы медиан " дважды и разбивать только после этого. Это снижает качество pivot, но быстрее.

Так вместо:

T(n) <= T(n/3) + T(2n/3) + O(n)
T(n) = O(nlogn)

складывается:

T(n) <= T(n/9) + T(7n/9) + O(n)
T(n) = Theta(n)