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

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

При этом я задумался и начал пытаться разработать наихудший случай и средний случай определенных алгоритмов.

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.info(sin + " = my function.");
    console.info(Math.sin(x)  + " math.sin");
}

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
424
1

Ответы 1

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

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

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

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

QGuy123 09.05.2018 07:44

Другие вопросы по теме