2015-11-20 2 views
1

Итак, у меня есть этот алгоритм (золотое сечение):Сложность формула этого алгоритма

public static float golden(int n){ 

float res; 

if(n == 0){ 
    res = 1; 
} else { 
    res = (float) (1.0 + (1.0/golden(n-1))); 
} 
return res; 

} 

Я полагаю, что Т (п) формула Т (п-1). Таким образом, я могу получить сложность следуя этой формуле ...

Т (п) = аТ (п - Ь) + с^нп (п)

... и это одна:

click

Но, что такое p (n) и c?

Я надеюсь, что кто-то может мне помочь.

Заранее благодарен!

+0

Вот подсказка: вы могли бы реализовать эту * без * рекурсии? Какая сейчас сложность? – Amit

+0

Я только «изучал» рекурсивные формулы, поэтому понятия не имею ... И ответ должен быть как рекурсивная формула. Спасибо за ответ! – MakeItFun

+0

Ваша функция 'golden' имеет сложность' O (n) ', так как каждый вызов принимает постоянное время + вызов' golden (n-1) '. – kajacx

ответ

0

Для каждого п> 0 вызов golden(n) результатов в постоянном количестве арифметических операций и один рекурсивного вызова, поэтому вы можете написать повторения для функции временной сложности Т (п), как

Т (п) = Т (п-1) + к, п> 0

где к это число операций в каждом вызове. Это отношение повторения для последовательного поиска.

Теперь вы можете применить формулу, которую вы упомянули в вопросе. Напомним, что d в формуле представляет собой степень многочлена p (n). Здесь

а = 1, с = 1, Ь = 1, а р (п) = к,

поэтому d = 0, то теперь, применяя вашу формулу вы получаете а = с^Ь, и, следовательно, применяется второй случай, так что

Т (п) = Тета (п^{d + 1} с^п) = Theta (п).

Это дает окончательный ответ T (n) = Theta (n).

+0

Большое вам спасибо! Можете ли вы порекомендовать мне какую-нибудь хорошую книгу об этой теме? – MakeItFun

+0

@ ErJasin Взгляните на 2-ю и 3-ю главы «Введение в алгоритмы» Т.Г. Cormen, C.E. Leiserson, R.L. Rivest и C. Stein. Я не знаю книгу, в которой вы можете найти формулу, которую вы упомянули в сообщении, но нетрудно доказать, что используется только формула для суммы геометрических рядов. –

Смежные вопросы