Меня попросили разработать рекурсивную функцию, а затем проанализировать асимптотическую сложность времени.Асимптотическая временная сложность рекурсивной функции
f(N) = 0, if N < N1
f(N1) = C1
f(N)= A1 + M1*f(M2*N/D1 - S1) Op M3*f(M4*N/D2 - S2), if N > N1
Мы предположить, что:
s1 = s2 = 0
m2 = m4 = 1
d1 = d2> 1
//the user enters N1 C1 A1 M1 M2 M3 M4 D1 D2 S1 S2 and then ARG
int Recursion_Plus(int ARG)
{
if (ARG < n1)
{
return 0;
}
else if(ARG == n1)
{
return c1;
}
else if(ARG > n1)
{
return a1 + m1
*
Recursion_Plus(m2*ARG/d1 - s1)
+
m3*Recursion_Plus(m4*ARG/d2 - s2);
}
}
Я ve проверила мою рекурсивную функцию против программы инструктора, и она работает точно так же, поэтому я перешел к моему анализу, где я ударил стена.
Я изо всех сил пытаюсь обмотать мозг вокруг этого, так что медведь со мной, пожалуйста.
Моя попытка частичного решения:
2 сравнений (если ARG < N1 & если ARG == N1) принимать 1 единицу времени
a1 & m1 & м3 незначительны, потому что они вне рекурсивного вызова
a1 + m1 * _ = 1 единица времени (дополнение)
м1 * _ = 1 единица времени (умножение)
добавления 2 рекурсивных вызовов вместе 1 единица времени
м3 * _ = 1 единица времени (умножение)
От инструкции, которые мы даем, обе рекурсивные функции будут вызываться с использованием одного и того же # каждый раз, и каждое последующее число, которое вызовет рекурсивная функция, будет меньше последнего, потому что d1 = d2> 1.
Таким образом, чем больше ARG (по сравнению с n1), тем больше времени требуется для достижения базового футляра, и чем больше результат будет. Итак, алгоритм занимает время O (ARG)?
Я был бы признателен, если бы кто-нибудь мог дать мне kno, если я на правильном пути. Спасибо
Huh? Как насчет этой функции? f (0) = 1, f (n) = f (n/2) + f (n/2) '. Во-первых, имеет ли я различную_ асимптотику сложность, чем 'f (0) = 1, f (n) = 2f (n/2)' (<- только один рекурсивный вызов)? И, кроме того, вы утверждаете, что она экспоненциальна? Ни одно из этих утверждений не является истинным. – rliu