Привет, я изучаю и пытаюсь узнать, как проверить временную сложность определенных алгоритмов. Я видел это видео, которое мне очень помогло.
При этом я задумался и начал пытаться разработать наихудший случай и средний случай определенных алгоритмов.
function sqrt(num) {
guess = num / 3;
do {
lastGuess = guess;
guess = (num / guess + guess) / 2;
while(Math.abs(lastGuess - guess));
return guess; /
Правильно ли я говорю, что это O (n), мои рассуждения заключаются в том, что мы зацикливаемся, пока не будет найдено прибл.
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");
}
Еще раз спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Во втором случае вы правы: это 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), поскольку он повторяется, пока мы не найдем ответ?