Sobes.tech
Middle

Ինչպես կարելի է օպտիմալացնել intersection ալգորիթմը։

sobes.tech AI

Պատասխան 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. Նկատել տվյալների բնութագրերը

Եթե տվյալները շատ մեծ են, կարելի է օգտագործել ավելի բարդ կառուցվածքներ կամ պառլելիզացիա:

Ընդհանուր առմամբ, հավաքի օգտագործումը ամենահեշտ և արդյունավետ միջոցն է մեծամասնության դեպքերում։