Решение рекуррентного соотношения T(n) = √n T(√n) + n

Можно ли решить рекуррентное соотношение

T(n) = √n T(√n) + n

Используя основную теорему? Это не по форме

Т (п) = а Т (п / б) + f (п)

но эта проблема дается в упражнении CLRS, глава 4.


person ahollyhock    schedule 02.09.2011    source источник
comment
Аналогичный вопрос: math.stackexchange .com/questions/689887/   -  person gt6989b    schedule 25.02.2014


Ответы (1)


Это не может быть решено с помощью основной теоремы. Однако это можно решить с помощью метода дерева рекурсии, чтобы разрешить O (n log log n).

Интуиция, стоящая за этим, заключается в том, чтобы заметить, что на каждом уровне дерева вы выполняете n работы. Верхний уровень не работает явно. Каждая из √n подзадач выполняет √n работ, что в сумме составляет n работ и т. д. Таким образом, теперь вопрос заключается в том, насколько глубоко дерево рекурсии. Ну, это количество раз, которое вы можете извлечь квадратный корень из n, прежде чем n станет достаточно маленьким (скажем, меньше 2). Если мы напишем

n = 2lg n

тогда при каждом рекурсивном вызове n будет извлекаться квадратный корень. Это эквивалентно уменьшению указанного выше показателя степени вдвое, поэтому после k итераций мы имеем это

n1/(2k) = 2lg n/(2k)

Мы хотим остановиться, когда это меньше 2, давая

2lg n/(2k) = 2

lg n/(2k) = 1

lgn = 2k

lg lg n = k

Таким образом, после lg lg n итераций извлечения квадратного корня рекурсия останавливается. И, поскольку на каждом уровне рекурсия работает O(n), общее время выполнения равно O(n lg lg n).

В более общем смысле, точно так же, как любой алгоритм, который многократно сокращает размер входных данных вдвое, должен заставить вас думать о log n, любой алгоритм, который многократно сокращает размер своих входных данных, извлекая квадратный корень, должен заставить вас думать о log log n. Деревья ван Эмде Боаса используют это повторение, например.

Интересно, что это повторение используется для получения времени выполнения известного алгоритма решения задачи о ближайших парах точек, детерминистически предполагая, что компьютер может взять слово произвольного действительного числа за постоянное время.

person templatetypedef    schedule 02.09.2011
comment
Спасибо !! Я пытался решить это с помощью рекуррентного дерева, но совершенно упустил тот момент, что на каждом уровне стоимость будет постоянной = n !! :) - person ahollyhock; 02.09.2011
comment
На самом деле вы сможете использовать основную теорему, если перепишете n = 2 ^ (2 ^ k). В этом случае T(n) = √n T(√n) + n принимает вид: T(2^(2^k)) = 2^(2^k-1) T(2^(2^k-1) )) + 2 ^ (2 ^ к). Однако «а» и «б» здесь не постоянны. Я думаю, что должен быть способ, но я не могу придумать его прямо сейчас. - person dhruvbird; 23.01.2012
comment
Спасибо за отличное объяснение. При выводе log log n я подумал, что было бы менее запутанно начать с n ^ (1/(2 ^ k)) = 2, а затем поднять обе части до (2 ^ k), в результате чего n = 2 ^ (2 ^ k ), который затем становится log log n = k, как указано выше. - person iano; 04.02.2013
comment
все, что вы сказали, относится к T (sqrt n), но есть (sqrt n) в умножении на T (sqrt n). Разве это не будет рассматриваться? - person Coffee_lover; 24.02.2014
comment
T(n) = 4*T(sqrt(n)) + n, можем ли мы использовать описанную выше процедуру и для этой задачи? ссылка на вопрос stackoverflow.com/questions/13458399/ - person Coffee_lover; 24.02.2014