Sobes.tech
Back to questions
Middle
6

Как можно оптимизировать алгоритм intersection?

Companies where asked
Яндекс

Answer from AI

sobes.tech AI

Оптимизация алгоритма пересечения (intersection) двух массивов или списков зависит от исходной реализации и требований.

Типичные подходы:

  1. Использование множества (Set)

Если исходный алгоритм — вложенные циклы (O(n*m)), можно значительно ускорить, преобразовав один из списков в множество для быстрого поиска (O(1) в среднем):

function intersection(arr1, arr2) {
  const set2 = new Set(arr2);
  return arr1.filter(item => set2.has(item));
}
  1. Сортировка и двухуказательный метод

Если данные отсортированы или можно их отсортировать, можно пройтись двумя указателями по обоим массивам, что даст O(n log n + m log m) из-за сортировки, но O(n + m) после:

function intersectionSorted(arr1, arr2) {
  arr1.sort();
  arr2.sort();
  let i = 0, j = 0;
  const result = [];
  while (i < arr1.length && j < arr2.length) {
    if (arr1[i] === arr2[j]) {
      result.push(arr1[i]);
      i++; j++;
    } else if (arr1[i] < arr2[j]) {
      i++;
    } else {
      j++;
    }
  }
  return result;
}
  1. Учитывать специфику данных

Если данные очень большие, можно использовать более сложные структуры или параллелизм.

В целом, использование множества — самый простой и эффективный способ для большинства случаев.