Գծային որոնում ընդդեմ Երկուական որոնումԱլգորիթմ
Գծային որոնում
Գծային որոնումն ամենապարզ մոտեցումն է, որն օգտագործվում է տվյալների հավաքածուում տարր որոնելու համար:
Խնդիր․Հաշվի առնելով «n» տարրերի զանգվածը և «t» թիրախային տարրը, գտե՛ք «t» ինդեքսը զանգվածում վերադարձնում է -1, եթե տարրի թիրախը չի գտնվել։
օրինակ՝ [-5,2,10,4,6], t=10 պետք է վերադարձնի 2
Այս խնդիրը կարելի է լուծել այս ֆունկցիայի միջոցով.
function linearSearch(array, target){ for (let i = 0; i < array.length; i++) { if (Array[i] === target) { return i; } } return -1; } //Big O = O(n)
Բարդությունն այստեղ O(n) մակարդակի է, քանի որ մենք ունենք ընդամենը մեկ օղակ, որտեղ n-ի արժեքը նվազում է:
Երկուական որոնում
Երկուական որոնում, որը նաև հայտնի է որպես կես ինտերվալային որոնում, լոգարիթմական որոնումը որոնման ալգորիթմ է, որը գտնում է թիրախային արժեքի դիրքը տեսակավորված զանգվածում:
Երկուական որոնումըհամեմատում է թիրախային արժեքը զանգվածի միջին տարրի հետ: Եթե դրանք հավասար չեն, ապա այն կեսը, որում թիրախը չի կարող պառկել, վերացվում է, և որոնումը շարունակվում է մնացած կեսի վրա՝ կրկին վերցնելով միջին տարրը՝ նպատակային արժեքի հետ համեմատելու համար և կրկնելով դա մինչև թիրախային արժեքը գտնվի: Եթե որոնումն ավարտվում է մնացած կեսի դատարկությամբ, թիրախը զանգվածում չէ:
Խնդիր․ Հաշվի առնելով «n» տարրերի տեսակավորված զանգվածը և «t» նպատակային տարրը, գտեք «t» ինդեքսը զանգվածում վերադարձնում է -1, եթե տարրի թիրախը չի գտնվել։
Այս խնդիրը կարելի է լուծել DICHOTOMIC ալգորիթմի ներդրմամբ.
function Dichotomie(array, target){ let leftIndex=0; let rightIndex=array.length-1; while (leftIndex <= rightIndex) { let middleIndex = Math.floor((leftIndex+rightIndex)/2); if (target === array[middleIndex]) { return middleIndex; } if (target < array[middleIndex]) { rightIndex = middleIndex - 1; //At every iteration as here we reduce the value of n by two } else{ leftIndex = middleIndex + 1; } } return -1; } //Big O = log(n)
Բարդությունն այստեղ log(n) մակարդակի է, քանի որ մենք ունենք ինդեքսի արժեքը, որը յուրաքանչյուր անգամ բաժանվում է երկուսի:
Ո՞րն է իրական տարբերությունը Գծային որոնման և Երկուական որոնման ալգորիթմի միջև:
- Երկուական որոնումն աշխատում է միայն տեսակավորված զանգվածի վրա
-Գծային որոնումն ունի O(n) ժամանակային բարդություն
- Երկուական որոնումն ունի log(n) ժամանակային բարդություն
Շնորհակալություն դիտելու համար! Զգույշ եղեք, տղաներ: