Привет, я изучал и пытался научиться проверять временную сложность некоторых алгоритмов. Я видел это видео, которое было очень полезно.
Это, как я сказал, я подумал и начал пытаться разобраться в случае с Worsts и средним случаем определенных алгоритмов.
Я верю в следующий фрагмент: O (n), так как для значения sin мы должны зацикливать весь массив.
function mySin(x, iterNum) {
var mxx = -x*x;
var sin = 1;
var n = 0;
var term = 1;
for (var i = 1; i <= 2*iterNum; i++) {
n = n + 2;
term = term * mxx / ( n*(n+1) );
sin = sin + term
}
sin = x*sin;
console.log(sin + " = my function.");
console.log(Math.sin(x) + " math.sin");
}
еще раз спасибо
function calculateFibonacciSum (num) {
if(cachedNumbers[num]) {
return cachedNumbers[num];
}
if(('number' === typeof num) && num <= 0) {
throw new Error ('Fibonnci series starts with 0. Please, enter any interget greater than or equal to 0');
}
else if(('number' === typeof num) && num === 0) {
return 0;
}
else if(('number' === typeof num) && (num === 1 || num === 2)) {
return 1;
}
else {
var value = calculateFibonacciSum(num-1) + calculateFibonacciSum(num-2);
cachedNumbers[num] = value;
return value;
}
}
Хотя для этого я думаю, что это также O (n), поскольку в первом случае if/else tc является O (1), так как его участник, в то время как заключительный оператор else мы должны закодировать все числа, и если число не вычисляется, тогда снова вызовите функцию (ака recurssion).
ТИА
Оба они кажутся мне верными. Здесь немного больше объяснений:
Это на самом деле O (n), так как существует n итераций цикла, остальное постоянное время; и n пропорционально iterNum
Это также линейное время, но только после кэширования результатов предыдущих вычислений. В противном случае это было бы O (2 n). Это линейное время, так как оно по существу запускает цикл до базовых случаев (0 и 1). Фактически, вы можете переписать этот код, используя цикл вместо рекурсии.