fb pixel
გამოიწერე YouTube-ის არხიyoutube logoგამოწერა
val-do.com-ის ლოგო
კურსებიბლოგიხ.დ.კ.წესებიკონტაქტიკონვერტორები

კურსებიბლოგიხ.დ.კ.წესებიკონტაქტიკონვერტორები
შესვლა
  1. მთავარი
  2. კურსები
  3. ალგორითმები
  4. ბინარული ძიება - binary search
ბინარული ძიება - binary search

ბინარული ძიება - binary search

ბინარული ძებნა არის ალგორითმი, რომლის დახმარებითაც ეფექტურად შეგვიძლია ვიპოვოთ ელემენტი სორტირებულ მასივში.

წრფივი ძიება (linear search)

წარმოვიდგინოთ, რომ გვაქვს მასივი, რომელიც სორტირებულია ზრდის მიხედვით [1, 3, 5, 7, 9, 11, 13, 15], თუ ჩვენ შევეცდებით მაგალითად 13 რიცხვის ძიებას ე.წ. წრფივი ძიებით, (linear search) მოგვიწევს არსებულ მასივში შევამოწმოთ დასაწყისიდან 13-ის ჩათვლით ყველა ელემენტი, იმისთვის რომ მივაგნოთ არსებულ რიცხვს.

ამისთვის ჩვენს პროგრამას დასჭირდება 7 იტერაცია.

მაგალითი:

function linearSearch(arr, target) {
    let iterations = 0; // იტერაციის მთვლელი

    for (let i = 0; i < arr.length; i++) {
        iterations++; // ვზრდით იტერაციას 1-ით
        if (arr[i] === target) {
            console.log(`ვიპოვეთ ${target} მე-${i} ინდექსზე ${iterations} იტერაციაში.`);
            return arr[i];
        }
    }

    console.log(`${target} ვერ მოიძებნა ${iterations} იტერაციაში.`);
    return -1;
}

const numbers = [1, 3, 5, 7, 9, 11, 13, 15];

linearSearch(numbers, 13);

დაიბეჭდება:

ვიპოვეთ 13 მე-6 ინდექსზე 7 იტერაციაში.

როგორც ზემოთ მაგალითშია მოყვანილი, 13-ის საპოვნელად დაგვჭირდა 13-მდე ყველა ელემენტის შემოწმება საპოვნელ რიცხვთან, თუ წარმოვიდგენთ, რომ ამ მასივში გვაქვს მაგალითად მილიონი ელემენტი, წარმოიდგინეთ რამდენად არაეფექტური იქნება მსგავსი ტიპის ალგორითმი რიცხვის საპოვნელად.

ბინარული ძებნა (binary search)

ბინარული ძებნა მარტივად რომ ავხსნათ წარმოადგენს ალგორითმს, რომლის დროსაც არსებულ მასივს ვყოფთ შუაზე, მანამ სანამ საძიებო რიცხვს არ ვიპოვით.

როგორ მუშაობს ბინარული ძებნა?

  1. ვპოულობთ მასივის შუა ელემენტს.
  2. თუ ეს ელემენტი ემთხვევა საძიებო ელემენტს ვაბრუნებთ ამ ელემენტს და ვწყვეტთ პროგრამას.
  3. თუ საძიებო ელემენტი ნაკლებია შუა ელემენტზე ძებნას ვაგრძელებთ მარცხენა ნაწილიში.
  4. თუ საძიებო ელემენტი მეტია შუა ელემენტზე ძებნას ვაგრძელებთ მარჯვენა ნაწილში.
  5. ვიმეორებთ 1-4 პუნქტებს მანამ სანამ არ მივაგნებთ ელემენტს ძიების დიაპაზონი არ იქნება ცარიელი.

მაგალითი:

function binarySearch(arr, target) {
    let left = 0;
    let right = arr.length - 1;
    let iterations = 0; // იტერაციის მთვლელი

    while (left <= right) {
        iterations++; // ვზრდით იტერაციას 1-ით
        let mid = Math.floor((left + right) / 2);

        if (arr[mid] === target) {
            console.log(`ვიპოვეთ ${target} მე-${mid} ინდექსზე ${iterations} იტერაციაში.`);
            return arr[mid]; // ელემენტი მოიძებნა
        }

        if (arr[mid] < target) {
            left = mid + 1; // ძიება მარჯვენა ნაწილში
        } else {
            right = mid - 1; // ძიება მარცხენა ნაწილში
        }
    }

    console.log(`${target} არ მოიძებნა ${iterations} იტერაციაში.`);
    return -1; // ელემენტი არ მოიძებნა
}

const numbers = [1, 3, 5, 7, 9, 11, 13, 15];

binarySearch(numbers, 13);

დაიბეჭდება:

 ვიპოვეთ 13 მე-6 ინდექსზე 3 იტერაციაში.

იტერაციების გარჩევა.

  • პირველი იტერაცია.
    • left = 0, right = 7 → mid = Math.floor((0+7)/2) = 3
    • arr[3] = 7 (ნაკლებია 13-ზე) → ვაგრძელებთ ძებნას მარჯვენა ნაწილში (left = 4)
  • მეორე იტერაცია.
    • left = 4, right = 7 → mid = Math.floor((4+7)/2) = 5
    • arr[5] = 11 (ნაკლებია 13-ზე) → ვაგრძელებთ ძებნას მარჯვენა ნაწილში (left = 6)
  • მესამე იტერაცია.
    • left = 6, right = 7 → mid = Math.floor((6+7)/2) = 6
    • arr[6] = 13 (ელემენტი ვიპოვეთ) → ვაბრუნებთ 6

როგორც მაგალითებიდან დავინახეთ წრფივი ძიების დროს კოდს დასჭირდა 7 იტერაცია, ხოლო ბინარული ძიების დროს 3.

პ.ს.
აუცილებელია გვახსოვდეს, რომ ბინარული ძიება მუშაობს მხოლოდ სორტირებულ მასივებთან


კურსში შემავალი თემები

🔗 algorithms

დამატებითი რესურსები

  • Telegram
  • Discord

სხვა კატეგორიები

შეისწავლეთ ვებდეველოპმენტის ენები სრულიად უფასოდ, ისეთები როგორებიცაა Javascript, HTML, CSS და კიდევ სხვა მრავალი ენა

HTML, CSS-ის სა...

HTML, CSS-ის საწყისი კურსი, დამწყებთათვის (deprecated - მოძველებული)

ჯავასკრიპტის კუ...

ჯავასკრიპტის კურსი

JavaScript-ის D...

JavaScript-ის DOM-ის კურსი

TypeScript-ის კ...

TypeScript-ის კურსი

Angular-ის კურს...

Angular-ის კურსი

HTML, CSS-ის კუ...

HTML, CSS-ის კურსი

Reactjs-ის კურს...

Reactjs-ის კურსი დამწყებთათვის

ალგორითმები...

ალგორითმები

Node.js-ის კურს...

Node.js-ის კურსი

Dart-ის კურსი...

Dart-ის კურსი

C პროგრამირების...

C პროგრამირების ენის საფუძვლები

ბოლოს დაწერილი ბლოგები პროგრამირებაზე

ქვემოთ მოცემულია უახლესი 3 ბლოგი პროგრამირების თემატიკასთან დაკავშირებით

როგორ ინახება ი...

როგორ ინახება ინფორმაცია. რა არის Bit და Byte?

რატომ არის კომფ...

რატომ არის კომფორტული სამუშაო ოთახი აუცილებელი კოდის წერისა და პროდუქტიული მუშაობისთვის?

რატომ ვერ პოულო...

რატომ ვერ პოულობენ ჯუნიორები სამსახურს?

  • ორი ცვლადის ალგორითმი
  • შებრუნებული სიტყვის ალგორითმი
  • ბინარული ძიება - binary search
პროგრამირების კურსები
HTML, CSSJavaScriptTypeScriptAngularReactJSNodeJSC
გამომყევი
mipov.net/valdo

© val-do.com 2026 წელი - ყველა უფლება დაცულია

ვერსია 0.1.56