Я хочу узнать временную сложность программы с использованием рекуррентных уравнений. То есть..
int f(int x)
{
if(x<1) return 1;
else return f(x-1)+g(x);
}
int g(int x)
{
if(x<2) return 1;
else return f(x-1)+g(x/2);
}
Я пишу его рекуррентное уравнение и попытался его решить, но он продолжает усложнять
T(n) =T(n-1)+g(n)+c
=T(n-2)+g(n-1)+g(n)+c+c
=T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
=T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
……………………….
……………………..
Kth time …..
=kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)
Let at kth time input become 1
Then n-k=1
K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)
Я не могу его решить дальше. В любом случае, если мы посчитаем количество вызовов функций в этой программе, можно легко увидеть, что временная сложность экспоненциальна, но я хочу доказать ее с помощью повторения. как это можно сделать?
Объяснение в Anwer 1, выглядит правильно, аналогичная работа я сделал.
Самая сложная задача в этом коде - написать уравнение рекурсии. Я нарисовал еще одну диаграмму, я определил некоторые шаблоны, я думаю, что мы можем получить некоторую помощь в этой диаграмме, что могло бы быть возможным рекуррентным уравнением.
And I came up with this equation , not sure if it is right ??? Please help.
T(n) = 2*T(n-1) + c * logn