Binary  Search Example With JavaScript

Binary Search Example With JavaScript

জাভাস্ক্রিপ্ট দিয়ে বাংলায় বাইনারি সার্চ।

Table of contents

No heading

No headings in the article.

বাইনারি সার্চ হল একটি সার্চিং কৌশল, যা ডিভাইড অ্যান্ড কনক্যুয়ার পদ্ধতিতে কাজ করে। এটি একটি সাজানো অ্যারেতে যেকোনো এলিমেন্ট অনুসন্ধান করতে ব্যবহৃত হয়।

লিনিয়ার সার্চ এর সাথে তুলনা করলে , বাইনারি সার্চ অনেক ফাস্ট , কারণ রেজাল্ট খুঁজে পেতে লিনিয়ার সার্চে অ্যারে এর প্রতিটি এলিমেন্টে লুপ চালাতে হয়, পক্ষান্তরে বাইনারি সার্চে অ্যারেকে দুইভাগে ভাগ করে ফেলা হয়, এরপর if কন্ডিশন দিয়ে চেক করা হয় টার্গেট এর চেয়ে অ্যারে এর বাম পাশের ইলিমেন্ট ছোট কি না, যদি ছোট হয় তাহলে বাম পাশের এলিমেন্ট আর চেক করবেনা , ডান পাশে টার্গেট খুঁজে পেলে আমাদেরকে রেজাল্ট দিয়ে দিবে, রেজাল্ট খুঁজে না পেলে -১ রিটার্ন করবে।

চলেন এবার কোড় করে দেখি—--

const amount = [1, 2, 3, 4, 5, 66, 77, 88, 90];
const target = 5;
/**
 * We start with the middle element of the array and compare it to the target. If the target is greater
 * than the middle element, we know that the target is in the right half of the array. If the target is
 * less than the middle element, we know that the target is in the left half of the array. We then
 * repeat this process on the half of the array that we know the target is in
 * @param arr - the array to search through
 * @param target - the value we're searching for
 * @returns The index of the target value.
 */
const binarySearch = (arr, target) => {
  let start = 0;
  let end = arr.length - 1;

  while (start <= end) {
    let mid = Math.floor((start + end) / 2);
    if (arr[mid] === target) {
      return `target ${target} found at index ${mid}`;
    } else if (arr[mid] < target) {
      console.log("tagret grater");
      start = mid + 1;
    } else {
      end = mid - 1;
    }
  }
  return -1;
};
console.log(binarySearch(amount, target));

প্রথমেই আমরা অ্যারেকে দুইভাগ করে ফেলছি, স্টারটিং ইন্ডেক্স ০, এবং এন্ড ইন্ডেক্স অ্যারে এর লেন্থ - ১ (লেন্থ -১ দেয়ার কারণ হলো অ্যারে এর ইন্ডেক্স শুরু হবে ০ থেকে আর অ্যারে ডট লেন্থ শুরু হবে ১ থেকে, অ্যারে ডট লেন্থ -১ করে অ্যারে এর সমান করে দিছি ) ধরে নিয়ে প্রথম ইন্ডেক্স এবং শেষ ইন্ডেক্সকে জাভাস্ক্রিপ্টের বিল্টইন মেথড ম্যাথ ডট ফ্লোর ( ফ্লোরিং করতে হচ্ছে কারন ভাগ করলে অনেক সময় দেখা যাবে দশমিক সংখ্যা চলে আসতেছে, অ্যারে ইন্ডেক্স কখনো দশমিক সংখ্যার হবেনা, সব সময় পূর্ণ সংখ্যা হবে ) এর সাহায্যে ডিভাইড করে আমরা মিড ইন্ডেক্স খুঁজে বের করছি।

প্রথমে if কন্ডিশন দিয়ে চেক করতেছি টার্গেট এর সাথে অ্যারে এর মিড এলিমেন্ট ম্যাচ করে কি না, যদি ম্যাচ করে আমরা এখান থেকেই রিটার্ন করে দিচ্ছি, যদি ম্যাচ না করে তখন আমরা else if কন্ডিশন দিয়ে চেক করতেছি অ্যারে এর মিড ইন্ডেক্স এর চেয়ে টার্গেট বড় কি না, যদি টার্গেট বড় হয়, আমরা স্টারটিং ইন্ডেক্সকে পরিবর্তন করে দিচ্ছি স্টারটিং ইন্ডেক্স = মিড ইন্ডেক্স এর সাথে ১ যোগ করে।

যদি টার্গেট মিড ইন্ডেক্স এর চেয়ে ছোট হয়, তখন আমরা ইন্ড ইন্ডেক্সকে পরিবর্তন করে দিচ্ছি ইন্ড = মিড -১।

যদি কোথাও খুঁজে পাওয়া না যায় তখন আমরা হোয়াইল লুপ ( ফর লুপ ব্যবহার না করে হোয়াইল লুপ ব্যবহার করার কারণ হলো আমরা জানিনা অ্যারেতে কতটি এলিমেন্ট থাকতে পারে, এই জন্য আমরা হোয়াইল লুপ ব্যবহার করেছি, হোয়াইল লুপ চলতেই থাকবে যতক্ষণ হোয়াইল লুপ এর কন্ডিশন সত্য হবে ) এর বাহিরে এসে -১ রিটার্ন করে দিচ্ছি।

ধন্যবাদ সবাই ভালো থাকবেন।

বিঃদ্রঃ কোথাও ভুল হলে দয়া করে একটু কারেকশন করে দিয়েন।