Анализ сложности времени в Javascript

1

Привет, я изучал и пытался научиться проверять временную сложность некоторых алгоритмов. Я видел это видео, которое было очень полезно.

Это, как я сказал, я подумал и начал пытаться разобраться в случае с Worsts и средним случаем определенных алгоритмов.

1

function sqrt(num) {
guess = num / 3;

  do {
    lastGuess = guess; 


    guess = (num / guess + guess) / 2;

   while(Math.abs(lastGuess - guess));

  return guess;  /

Правильно ли я говорю, что это O (n), мои рассуждения - это то, что мы зацикливаемся до тех пор, пока не будет найдено приблизительное значение.

2

function max(numArray) 
{
    // copy the given array 
    nums = numArray.slice();

    // base case: if we're at the last number, return it
    if (nums.length == 1) { return nums[0]; }

    // check the first two numbers in the array and remove the lesser
    if (nums[0] < nums[1]) { nums.splice(0,1); }
    else { nums.splice(1,1); }

    // with one less number in the array, call the same function
    return max(nums);
}

От пользователя спасибо в ссылке, он вычисляет наибольшее число в массиве. Можно ли с уверенностью сказать, что временная сложность в этом случае равна O(n) поскольку наибольшее число может быть самым последним, и, следовательно, почему O(n)?

# 3 Хотя я верю в следующий фрагмент, это 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");
}

еще раз спасибо

Теги:
arrays
big-o
time
time-complexity

1 ответ

0

Для второго вы правы: O(n) поскольку yu нужно пересечь n элементов, чтобы найти максимум. Однако в первом случае у ypu нет ничего, что изменилось бы на вашем входе. Это всегда займет несколько шагов, пока вы не нажмете на догадку, которая как бы не зависит от размера вашего номера. Поэтому это скорее O(1). Например, эти цифры имеют только одну цифру, но для каждого алгоритма используется другое количество итераций:

 sqrt(9) // 1 iteration
 sqrt(3) // a few iterations

Можно также сказать, что мы не можем предсказать временную сложность первого.

  • 0
    Привет, Джонас, большое спасибо! Я относительно новичок и пытаюсь практиковаться в этом. Я специально спросил # 1, так как я не мог найти в Интернете ничего, что касается цикла do ... while Это сказано в следующем фрагменте кода: for (var i = 1; i <= 2 * iterNum; i ++) {n = n + 2; термин = термин * мхх / (n * (n + 1)); sin = sin + term} Правильно ли я сказать, что это тоже O (n), поскольку оно повторяется, пока мы не найдем ответ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню