Что такое скорость алгоритма

Ответ

Скорость алгоритма (временная сложность) — это оценка времени выполнения алгоритма в зависимости от размера входных данных. Измеряется в нотации Big-O (O(n), O(log n) и т.д.).

Примеры:

  • O(1) — константное время (доступ к элементу массива по индексу)
const arr = [1, 2, 3];
console.log(arr[0]); // O(1)
  • O(n) — линейная сложность (перебор массива)
for (let i = 0; i < arr.length; i++) { // O(n)
  console.log(arr[i]);
}
  • O(n²) — квадратичная сложность (вложенные циклы)
for (let i = 0; i < n; i++) { // O(n²)
  for (let j = 0; j < n; j++) {
    console.log(i, j);
  }
}

Важно учитывать худший сценарий работы алгоритма.

Ответ 18+ 🔞

А, вот это тема, про которую все так умно говорят, а потом пишут хуйню, которая тормозит как чугунный мост! Слушай сюда, сейчас разжую.

Скорость алгоритма, или, как умники говорят, временная сложность — это, по сути, ответ на вопрос: "Насколько долго эта штука будет ебаться с моими данными, если их станет овердохуища?" Измеряется это всё в нотации Big-O, типа O(n), O(log n) и прочая пиздопроебибна.

Смотри, вот тебе примеры, чтобы не быть мартышлюшкой:

  • O(1) — Константное время. Быстро, как хуй с горы. Время не зависит ни от чего. Пример — достать пиво из холодильника по известной полке.

    const arr = [1, 2, 3];
    console.log(arr[0]); // O(1) — схватил первый элемент и всё, похуй сколько их всего.
  • O(n) — Линейная сложность. Чем больше данных, тем дольше. Как проверять всех гостей на вечеринке, есть ли у них инвайт. Одного проверил — один шаг, сто гостей — сто шагов.

    for (let i = 0; i < arr.length; i++) { // O(n) — перебираем ВСЕ элементы, блядь.
    console.log(arr[i]);
    }
  • O(n²) — Квадратичная сложность. Вот тут начинается пиздец. Время растёт как урод. Это как если бы ты на той же вечеринке заставлял каждого гостя поздороваться за руку с КАЖДЫМ другим гостем. 10 гостей — 100 рукопожатий, 100 гостей — уже 10 000, ёпта! Начинается ад.

    for (let i = 0; i < n; i++) { // O(n²) — Вложенный цикл, мать его.
    for (let j = 0; j < n; j++) {
    console.log(i, j);
    }
    }

И главное, что надо запомнить, как "Отче наш": всегда считай по худшему сценарию. Не "ой, обычно-то быстро", а "а что если входящие данные — просто пиздец какой огромный и неудобный?" Вот на этот случай и смотри. Потому что если оптимизировать под лучший случай, а приедет худший — твоё приложение накроется медным тазом, и пользователи тебе в рот насрут.