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

Ответ

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

Основные виды сложности:

  • O(1) — константная (например, доступ к элементу массива по индексу).
  • O(n) — линейная (например, поиск в неотсортированном массиве).
  • O(log n) — логарифмическая (например, бинарный поиск).
  • O(n²) — квадратичная (например, пузырьковая сортировка).

Пример:

// O(n) — линейная сложность  
function linearSearch(array $arr, int $target): bool {  
    foreach ($arr as $value) {  
        if ($value === $target) return true;  
    }  
    return false;  
}  

Чем меньше сложность, тем эффективнее алгоритм на больших данных.

Ответ 18+ 🔞

Ну, слушай, тут про сложность алгоритмов, такая тема, которая сначала кажется страшной, а потом, когда врубаешься, понимаешь — да это же просто про то, сколько времени твой код будет ебаться с задачей, пока не выдаст результат.

Представь, что у тебя есть список, овердохуища длинный. И тебе надо найти в нём одну строчку. Если ты будешь тупо смотреть с начала и до конца — это линейная сложность, O(n). Чем список длиннее, тем дольше ищешь. Логично же? Это как искать иголку в стоге сена, перебирая каждую травинку. Ёпта, скучно, но что поделать.

А вот если список отсортирован, то можно умнее. Делишь его пополам, смотришь — не там? Отбрасываешь половину и повторяешь. Это как найти нужную страницу в книге, листая не подряд, а открывая примерно в нужном месте. Это уже O(log n), логарифмическая. Ебать мои старые костыли, так в разы быстрее!

А теперь представь самый пиздец — квадратичная сложность, O(n²). Это когда ты для КАЖДОГО элемента списка проходишь по ВСЕМУ списку. Типа пузырьковая сортировка. На маленьких данных — да похуй, работает. Но дай ему массив побольше... Чёрта в душу, в сердцу мать! Он будет работать так долго, что ты за это время успеешь постареть, обзавестись семьёй и вырастить внуков. Волнение ебать смотреть на это.

Вот, смотри, пример линейного поиска, простой как три копейки:

// O(n) — линейная сложность  
function linearSearch(array $arr, int $target): bool {  
    foreach ($arr as $value) {  
        if ($value === $target) return true;  
    }  
    return false;  
}

А константная сложность, O(1) — это вообще сказка. Доступ к элементу массива по индексу. Неважно, массив на 10 элементов или на миллион — время одно и то же. Ни хуя себе, да? Вот к этому и надо стремиться.

Короче, суть в чём: чем меньше эта самая сложность, тем эффективнее алгоритм на больших данных. Игнорируешь это — получаешь пидараса шерстяного, который виснет на ровном месте. А учитываешь — живешь спокойно и бздеть не надо, что всё накроется медным тазом от нагрузки. Всё просто, чувак.