Количество runners — N
Максимальное количество файлов, возвращаемое runner — M
Было:
function process() {
const results = [];
for (const run of runners) { // N итераций, по одной для каждого элемента runners
const files = run();
for (const file of files) { // M итераций, по одной для каждого элемента files
results.push(processFile(file));
}
return results;
}
O(N * M)
Стало:
function process() {
const results = [];
for (const run of runners) { // N итераций, по одной для каждого элемента runners
files.push(...run()); // M итераций, по одной для каждого элемента, возвращаемого run(). Spread оператор не за константу ведь работает?
}
for (const file of files) { // N*M итераций, по одной для каждого элемента files (для каждого из N runners мы добавили в files M элементов).
results.push(processFile(file));
}
return results;
}
O(N*M) + O(N*M) = O(N*M)
Вычислительная сложность: не изменилась.
Скорость работы: возможно, изменилась, я не проверял.
Но сложность алгоритма из квадратичного линейной точно не стала, хотя именно это, по словам автора, является причиной ускорения.
Первое в жизни собеседование на программиста проходило так: спросили, есть ли у меня какой-то код, типа учебного проекта. У меня как раз такой был, его и показал. Попросили добавить туда несколько фич. Что-то смог добавить сам, что-то не смог в силу недостатка знаний, но с парой подсказок таки допилил. Ушло на все собеседование часа 4. В итоге все успешно, приняли на работу. Не верил своему счастью, чувствовал себя самозванцем еще несколько месяцев.
Моему старшему сыну 5. Любит посмотреть, как я играю, да и сам играет тоже. Так вот, что заметил — всегда предпочитает игры, где надо строить, типа minecraft, empyrion galactic survival, space engineers, kerbal space program, причем в первых трех обязательно креативный режим, чтоб «никто меня не убивал и я никого не убивал». При том, что имеются и другие игры, в которые я играю, и которые можно отнести к «жестоким». Именно строительство интересует, раскраска, текстурирование (в empyrion). При этом, когда обычными игрушками играет, периодически они у него друг друга убивают) Пытается строить те же конструкции, что строил в игре, с помощью кубиков лего. Ограничиваю только по времени, но обычно говорю о выделенном на игры времени заранее. Я, честно говоря, не знаю, к чему это приведет. Я тот еще воспитатель.
Максимальное количество файлов, возвращаемое runner — M
Было:
O(N * M)
Стало:
O(N*M) + O(N*M) = O(N*M)
Вычислительная сложность: не изменилась.
Скорость работы: возможно, изменилась, я не проверял.
Но сложность алгоритма из квадратичного линейной точно не стала, хотя именно это, по словам автора, является причиной ускорения.