Вопрос проверяет понимание временной сложности алгоритмов при анализе вложенных циклов, работающих с разными массивами.
Когда у нас есть два вложенных цикла, каждый из которых проходит по своему массиву, общая временная сложность вычисляется как произведение длин этих массивов. Если первый массив имеет размер n, а второй — m, то сложность составит O(n * m). Это важно отличать от случая, когда оба цикла проходят по одному и тому же массиву — тогда сложность была бы O(n²).
const arr1 = [1, 2, 3]; // n = 3
const arr2 = ['a', 'b']; // m = 2
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
console.log(arr1[i], arr2[j]);
}
}
// Вывод: 1 a, 1 b, 2 a, 2 b, 3 a, 3 b — всего 6 операций (3 * 2)В данном примере выполняется 6 итераций, что соответствует O(3 * 2). Если бы массивы были одинакового размера, то сложность стала бы O(n²), но здесь она линейно зависит от обоих размеров.
Вывод: Используйте O(n * m) для оценки производительности, когда вложенные циклы работают с разными массивами. Это не квадратичная сложность, но всё равно может быть неэффективной при больших размерах данных — в таких случаях стоит рассмотреть оптимизацию через хеш-таблицы или сортировку.