Мне нужно создать и решить рекуррентное отношение для анализа наихудшего случая для следующего псевдокода. Я рассчитываю добавление чисел (не считая счетчика цикла for) в качестве основной операции.
Я предполагаю, что п = 2 ^ к.
Вот мой прогресс ...
Базовый вариант:
T (n <= 4) = 1 </p>
W (n) = W (2 ^ k) = добавления для вычисления ответа + добавления в следующей рекурсии + добавление в цикл for
W (2 ^ k) = 2 + W (2 ^ (k-2)) + (2 ^ k) - 2 = W (2 ^ (k-2)) + (2 ^ k)
Я использую обратную подстановку и получаю следующее рекуррентное соотношение ...
для j-го рекурсивного вызова
W (2 ^ k) = W (2 ^ (k-2j)) + (2 ^ k) + сумма (t = 1, j, 2 ^ (k-2 (t-1)))
Я знаю, что могу упростить это, потому что я беру W (2 ^ (k-2j)) = W (4) и решаю для j, чтобы увидеть, сколько рекурсивных шагов делает код.
В этом случае j = (k / 2) - 1. Уменьшение повторения дает мне ...
W (2 ^ k) = 1 + (2 ^ k) + сумма (t = 1, j, 2 ^ (k-2 (t-1))).
Сокращение суммы дает мне ...
W (2 ^ k) = 1 + (2 ^ k) + (2 ^ k) * (2 ^ 2) * сумма (t = 1, j, 2 ^ (- 2t)) или
W (n) = 1 + n + 4n * сумма (t = 1, j, 2 ^ (- 2t))
Что я не могу упростить, так это суммирование. В лекциях у нас может быть суммирование суммы (i = 1, n, 2 ^ i), которая была бы 2 ^ (n + 1) -1, но эта отличается.
int function calc(int n) {
int num,answer;
if(n<=4) {return n+10;}
else {
num=calc(n/4);
answer=(num+num+10);
for(int i=2;i<=n-1;i++) {
answer=answer+answer;
}
return answer;
}
}
Любая помощь будет оценена. Это назначение должно быть сегодня вечером. Спасибо