Sobes.tech
Middle

Hogyan optimalizálható az intersect algoritmus?

sobes.tech MI

Válasz az MI-től

Két tömb vagy lista metszetének algoritmusának optimalizálása a kiindulási megvalósítástól és az igényektől függ.

Tipikus megközelítések:

  1. Halmaz (Set) használata

Ha a kiindulási algoritmus beágyazott ciklusokat tartalmaz (O(n*m)), jelentősen felgyorsítható az egyik lista halmazá alakításával gyors kereséshez (átlagosan O(1)):

function intersection(arr1, arr2) {
  const set2 = new Set(arr2);
  return arr1.filter(item => set2.has(item));
}
  1. Rendezés és két mutató módszer

Ha az adatok rendezettek vagy rendezhetők, végig lehet menni mindkét tömbön két mutatóval, ami O(n log n + m log m) a rendezés miatt, de utána 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. Figyelembe venni az adatok sajátosságait

Ha az adatok nagyon nagyok, összetettebb struktúrák vagy párhuzamos feldolgozás is alkalmazható.

Általánosságban a halmaz használata a legegyszerűbb és leghatékonyabb módszer a legtöbb esetben.