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:
- 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));
}
- 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;
}
- 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.