Какую чаще выбираешь сложность алгоритма

Ответ

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

// O(1) - доступ по ключу в массиве
$user = $usersById[$id];

// O(n) - простой перебор массива
foreach ($users as $user) {
    echo $user['name'];
}

Избегаю квадратичной O(n²) и экспоненциальной сложности. Если нужны сложные операции, использую встроенные функции PHP (array_filter, array_map), которые часто оптимизированы лучше ручных реализаций. Для поиска/сортировки предпочитаю хеш-таблицы (O(1)) или бинарный поиск (O(log n)).

Ответ 18+ 🔞

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

Вот смотри, в PHP я обычно как делаю? Беру либо линейную сложность, которую O(n) зовут, либо константную — O(1). Почему? Да потому что на вебе это самые адекватные варианты, чтобы сервер не накрылся медным тазом от нагрузки. Всё должно быть быстро, и точка.

Вот, например, классика жанра — доступ по ключу в массиве. Это O(1), красота же!

$user = $usersById[$id];

Берешь и хватаешь юзера моментально, хуй с горы. Никаких переборов, чистая магия хеш-таблицы.

А если уж надо всё-таки по списку пройтись, то O(n) — наш выбор. Простой, предсказуемый foreach:

foreach ($users as $user) {
    echo $user['name'];
}

Работает пропорционально количеству элементов. Добавил тысячу записей — цикл сделает тысячу итераций. Всё честно.

А теперь, чувак, слушай сюда. Есть вещи, от которых я бегу как чёрт от ладана. Это квадратичная сложность O(n²) и, не дай бог, экспоненциальная. Это пиздец полный. Представь: вложенный цикл, который для каждого элемента перебирает весь массив снова. На маленьких данных — ок, а как только данных станет овердохуища — всё, твой скрипт превращается в сосалку ресурсов, и ты сам от себя охуеешь, глядя на графики нагрузки.

Поэтому мой главный совет — не изобретай велосипед. В PHP куча встроенных функций, типа array_filter или array_map. Они зачастую оптимизированы на уровне движка куда лучше, чем твой ручной код на коленке. Используй их, не стесняйся.

Ну и напоследок про поиск и сортировку. Если нужно что-то найти — хеш-таблицы (опять O(1)) рулят, пизда рулю. Если нужна сортировка или поиск по упорядоченным данным — смотри в сторону бинарного поиска, это O(log n), что тоже очень даже ничего.

Короче, суть в чём: думай головой, прежде чем писать код. Э, бошка, думай! Выбирай инструменты с умом, и не будет тебе ни хиросимы, ни нагасаки в виде упавшего продакшена.