Проделаем анализ сложности, и мы обнаружим, что асимптотическое поведение T(n)
зависит от констант рекурсии.
Учитывая T(n) = A T(n*p) + C
с A,C>0
и p<1
, давайте сначала попытаться доказать T(n)=O(n log n)
. Мы пытаемся найти D
таким образом, что при достаточно больших n
T(n) <= D(n * log(n))
Это дает
A * D(n*p * log(n*p)) + C <= D*(n * log(n))
Глядя на более высокого порядка, это приводит к
A*D*p <= D
Итак, если A*p <= 1
, это работ и T(n)=O(n log n)
.
В частном случае, A<=1
мы можем сделать лучше, и доказать, что T(n)=O(log n)
:
T(n) <= D log(n)
Урожайность
A * D(log(n*p)) + C <= D*(log(n))
Глядя на более высокого порядка, это приводит к
A * D * log(n) + C + A * D *log(p) <= D * log(n)
Что действительно для достаточно больших D
и n
с A<=1
и log(p)<0
.
В противном случае, если A*p>1
, давайте найдем минимальное значение q
такое, что T(n)=O(n^q)
.Мы пытаемся найти минимальное q
такое, что существует D
, для которых
T(n) <= D n^q
Это дает
A * D p^q n^q + C <= D*n^q
Глядя на более высокого порядка, это приводит к
A*D*p^q <= D
Минимальный q
который удовлетворяет этому, определяется
A*p^q = 1
Таким образом мы приходим к выводу, что T(n)=O(n^q)
для q = - log(A)/log(p)
.
Теперь, учитывая T(n) = A T(n*p) + B n^a + C
с A,B,C>0
и p<1
, пытаются доказать, что T(n)=O(n^q)
для некоторого q
. Мы пытаемся найти минимальное q>=a
, что для некоторых D>0
,
T(n) <= D n^q
Это дает
A * D n^q p^q + B n^a + C <= D n^q
Попытка q==a
, это будет работать только если
ADp^a + B <= D
Т.е. T(n)=O(n^a)
если Ap^a < 1
.
В противном случае мы получаем Ap^q = 1
, как и прежде, что означает T(n)=O(n^q)
для q = - log(A)/log(p)
.
1) Для ответа на вопрос 1. Почему мы должны делать (2/3)^kn = 1? И как вы делаете с этого шага на результат? Можете ли вы объяснить мне более подробно? –
А что, если вопрос 2) спросить о большой тета-нотации, то какой результат? –
Для (1) вы в конечном счете пытаетесь выяснить, когда рекурсия завершается, и это происходит, когда размер ввода падает до 1. Следовательно, вы решаете для k, где n (2/3)^k = 1; это тот момент, когда рекурсия прекращается. Для части (2) решение, которое я дал, асимптотически плотно. Вы можете переписать его, используя обозначение theta. – templatetypedef