Что такое O в оценке алгоритмической сложности

Ответ

O (Big O) — это нотация для описания верхней границы времени выполнения или потребления памяти алгоритма в худшем случае. Она показывает, как растёт сложность алгоритма при увеличении размера входных данных (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);
      }
    }

Важно учитывать доминирующий член (например, в O(n + n²) → O(n²)).

Ответ 18+ 🔞

А, слушай, про эту вашу O-нотацию, блядь! Ну, это ж как в очереди за водкой: можно сразу к кассе подойти, а можно всю очередь, сука, с конца обойти. Вот и вся сложность, в рот меня чих-пых!

Это такая хуйня, которая показывает, как твой алгоритм обосрётся, когда данных станет овердохуища. Не в секундах, а в росте ебли, если грубо.

Смотри, примеры, чтобы не быть мудаком:

  • O(1) — Константная. Вошёл в квартиру — хвать водку из холодильника. Всё. Неважно, один ты или десять друзей на кухне — путь к холодильнику один и тот же, ёпта.

    const bar = ['водка', 'пиво', 'сок'];
    console.log(bar[0]); // O(1) — сразу взял водку, красава
  • O(n) — Линейная. Тебе надо найти свою, блядь, заначку в десяти банках с огурцами. В худшем случае перетрёшь все десять. Чем больше банок — тем дольше ебёшься.

    for (let i = 0; i < jars.length; i++) { // O(n)
      if (jars[i] === 'заначка') console.log('Ура!');
    }
  • O(n²) — Квадратичная. Это пиздец, товарищ. Представь, ты каждому из десяти гостей должен пожать руку каждому другому. Это уже, блядь, 100 рукопожатий. Добавь ещё гостей — и ты просто сдохнешь, это экспоненциальный пиздец.

    for (let i = 0; i < guests.length; i++) {       // O(n²) — адский труд
      for (let j = 0; j < guests.length; j++) {
        console.log(guests[i], 'жмёт руку', guests[j]);
      }
    }

И главное, чувак — смотри на самую жирную, доминирующую хуйню. Если у тебя O(n + n²), то про n можно забыть, как про страшный сон. Остаётся O(n²), потому что квадратичная ебля всегда переебёт линейную. Вот и вся магия, сука!