Middle
Intersection алгоритмин кантип оптималдаштырууга болот?
sobes.tech AI
AIден жооп
Екі массив немесе тізімнің қиылысуын (intersection) оңтайландыру бастапқы жүзеге асыруға және талаптарға байланысты.
Түрлі тәсілдер:
- Жинақ (Set) қолдану
Егер бастапқы алгоритм ішкі циклдардан тұрса (O(n*m)), оны айтарлықтай жылдамдатуға болады, бір тізімді жинаққа айналдырып, тез іздеу үшін (орташа O(1)):
function intersection(arr1, arr2) {
const set2 = new Set(arr2);
return arr1.filter(item => set2.has(item));
}
- Тәртіптеу және екі көрсеткіш әдісі
Егер деректер сұрыпталған немесе сұрыпталуы мүмкін болса, екі көрсеткішпен екі массивті өтуге болады, бұл сұрыптау себебінен 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;
}
- Маалыматтын өзгөчөлүгүн эске алуу
Эгер маалыматтар өтө чоң болсо, татаал структураларды же параллел иштетүүнү колдонсо болот.
Жалпысынан, жыйынды колдонуу — көбүнчө эң жөнөкөй жана эффективдүү ыкма.