#time-complexity #big-o
#временная сложность #big-o
Вопрос:
Если бы кто-нибудь мог пошагово описать функцию и объяснить, как они будут определять временную сложность, я был бы действительно признателен. Я все еще немного теряюсь, когда дело доходит до этого.
int exp2 (int a, int b)
{
if (b==1)
return a;
Else
return a*exp2(a,b-1);
}
Ответ №1:
O(b).
Обратите внимание, что функция будет повторяться b раз, выполняя одну операцию (умножение).
(1) exp(4, 20) = 4 * exp(4, 19)
(2) exp(4, 19) = 4 * exp(4, 18)
(3) exp(4, 18) = 4 * exp(4, 17)
...
(b) exp(4, 1) = 4
Комментарии:
1. Итак, то, как я это видел, и, возможно, вы можете сказать мне, почему я ошибаюсь, заключается в том, что саму функцию нужно будет повторить b-1 раз на основе значения b, очевидно, но затем, как только это будет завершено, ей нужно рекурсивно умножить a на значение, возвращенное последующими функциями… я слишком много думаю об этом?
2. Вы измеряете сложность на основе количества операций, которые функция должна будет выполнить в соответствии с входными данными.
3. В этом случае операция, которую вы выполняете, является
*
. Сколько*
вы сделаете заexp(4, 20)
? Как я показал в примере, это будутb - 1
операции*
, следовательно, сложность равнаO(b - 1)
=O(b)
.4. Большое спасибо за ответ и объяснение!
Ответ №2:
Это эквивалентно возведению a
в степень b-1
. Количество используемых операций равно b-1
. Она увеличивается пропорционально b
такой сложности O(b)
.