Есть ли лучший способ выполнять поэлементные операции на 2 массивах - PullRequest
2 голосов
/ 27 марта 2019

Требуется поэлементное суммирование по 2 массивам. Помимо использования вложенного цикла, есть ли более эффективный способ сделать это?

Я использую JavaScript ES6.

Я думал об использовании карты, но карта всегда будет возвращать массив той же длины, что и тот, к которому он был вызван.

Я также рассмотрел возможность использования объекта для хранения сумм, но я не смог бы сделать это, не вложив 2 цикла for в какой-то момент.

const arr1 = [1, 2];
const arr2 = [0, 3, 5];

const sum = [];

for (let x of arr1) {
  for (let y of arr2) {
    sum.push(x + y);
  }
}
// Expected output: [ 1, 4, 6, 2, 5, 7 ]

Ожидаемое решение должно быть лучше, чем O (n ^ 2).

1 Ответ

0 голосов
/ 27 марта 2019

Полагаю, вы можете создать список списков, каждый внутренний список является результатом сопоставления одного из ваших входных списков с дополнением с одним элементом из другого списка.

const sums = [];

for (let x of arr1) {
  sums.push(arr2.map(function (y) { return y + x }))
}

В результате вы получите один массив, содержащий n массивов, заполненных результатами. Доступ к ним с помощью sums[i][j].

Это не уменьшает сложность (она все равно будет O ( n × m ), и я уверен, что это неизбежно), но он переносит некоторые вычисления из кода JS в реализацию map, которая, вероятно, более эффективна (оптимизирована в реализации JS браузера и т. д.).

Это будет более эффективно, если arr1 меньше, чем arr2, поэтому вы можете поменять их местами, прежде чем применять эту идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...