Проверяет понимание оценки временной сложности алгоритмов с последовательными и вложенными циклами, что важно для написания эффективного кода.
Сложность алгоритма показывает, как растёт время выполнения при увеличении входных данных. Для циклов важно различать, выполняются ли они последовательно или вложенно, так как это кардинально меняет итоговую оценку.
Если два цикла идут друг за другом, их сложности складываются. Например, один цикл проходит по массиву A длиной n, затем второй — по массиву B длиной m. Итоговая сложность — O(n + m). При больших n и m это линейный рост, что эффективно.
for (let i = 0; i < n; i++) { /* O(n) */ }
for (let j = 0; j < m; j++) { /* O(m) */ }
// Итого: O(n + m)Когда один цикл находится внутри другого, для каждой итерации внешнего цикла выполняется полный внутренний цикл. Если внешний проходит n раз, а внутренний m раз, общее число операций — n * m, то есть O(n * m). Если оба массива длины n, получаем O(n^2) — квадратичная сложность, которая быстро становится проблемой.
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
// O(1) операция
}
}
// Итого: O(n * m)Итог: последовательные циклы дают линейную сложность O(n + m), а вложенные — мультипликативную O(n * m). Понимание этого различия помогает выбирать эффективные алгоритмы и избегать неожиданных замедлений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию