Википедия перечисляет алгоритм медианы медианов как требующий вспомогательное пространство O(1).
Однако в середине алгоритма мы делаем рекурсивный вызов в подмассиве размером n/5, чтобы найти медиану медианов. Когда это рекурсивный вызов возвращается, мы используем возвращаемую медиану медиан в качестве опоры для разделения массива.
Разве этот алгоритм не вставляет записи активации O(lg n) в стек времени выполнения как часть рекурсии? Из того, что я вижу, эти рекурсивные вызовы для поиска последовательных медианов медианов не могут быть оптимизированы с помощью хвоста, потому что мы делаем дополнительную работу после возвращения рекурсивных вызовов. Поэтому, похоже, для этого алгоритма требуется вспомогательное пространство O(lg n) (как и Quicksort, список Википедии которого требует использования вспомогательного пространства O(lg n) из-за пространства, используемого стеком времени выполнения).
Я что-то упустил, или статья в Википедии неверна?
(Примечание. Рекурсивный вызов, на который я имею в виду, - это return select(list, left, left + ceil((right - left) / 5) - 1, left + (right - left)/10) на странице Википедии.)