int function(int n){
if (n<=1)
return 1;
else
return (2*function(n/2));
}
Что такое рекуррентное соотношение T(n) для времени работы и почему?
int function(int n){
if (n<=1)
return 1;
else
return (2*function(n/2));
}
Что такое рекуррентное соотношение T(n) для времени работы и почему?
Функция сложности этого алгоритма будет
T(n) = T(n / 2) + 1
T(1) = 1
Применяя основную теорему, мы получим
a = 1
b = 2
c = 0 (1 = n^0)
log b(A) = log2(1) = 0 = 0 c, thus case 2
apply values and the result is O(log n).
Как уже правильно сказал @guillaume, это можно решить намного проще, используя линейную функцию.
a
должно быть 2, а не 1. Я исправил это. Однако теперь результат линейный, а не логарифмический. И я не совсем понимаю ваш вопрос
- person Paul; 23.01.2016
T
, но нам нужно вычислить T
для кода.
- person Paul; 23.01.2016
O(log n)
верно.
- person Paul; 23.01.2016
Вы можете вычислить напрямую: это ближайшее 2 ^ n, самое большое или равное.
Вы вычисляете L=log2(n) и берете 2^L или 2^(L+1)
Сложность O(log2 N): log2 N операций.