Skip to main content

Command Palette

Search for a command to run...

DSA: 2 | Binary Search Algorithms in Bangla | বাইনারি সার্চ অ্যালগরিদম

All You need to learn to Begin with Binary Search

Updated
14 min read
DSA: 2 | Binary Search Algorithms in Bangla | বাইনারি সার্চ অ্যালগরিদম
I

Hi, I’m Ibrahim Sifat, a Frontend Engineer and Full Stack Developer based in Jeddah, Saudi Arabia. I specialize in building scalable web applications with React, Next.js, and Laravel. With over 4 years of experience, I love creating user-friendly designs, optimizing performance, and solving complex problems. Let’s build something great together!

Quick Note

আমি একজন learner। যেভাবে আমি concept টা understand করেছি, সেভাবেই explain করার try করেছি। So... এই journey তে কোন mistake দেখলে, বা কিছু add করার থাকলে, কোন জায়গায় বুঝতে problem হলে, যেকোনো সময় comment করে জানাতে পারেন। একসাথে learning টা more enjoyable হবে!

Since I'm not a pro (এখনো শিখছি!), there might be some mistakes. আপনাদের feedback আমার কাছে valuable হবে!

Let's learn and grow together! চলোন শুরু করি! 🚀

Recap

গত ক্লাসে আমরা Linear Search নিয়ে কথা বলেছিলাম, যেখানে আমরা একটা একটা করে সব element চেক করতাম। কিন্তু আজ? আজ আমরা শিখবো একটা অনেক স্মার্ট টেকনিক - Binary Search!

ধরো, আপনার বন্ধু সৌরভ তার বার্থডে তে তোমাকে দাওয়াত দিয়েছে। কিন্তু ওপস! তুমি ওর ফ্ল্যাট নাম্বার ভুলে গেছো। তুমি জানো এটা ১-১০০ এর মধ্যে। এখন কি করবে?

Approach 1: নিউবি স্টাইল 🐌

  • ১ নাম্বার ফ্ল্যাটে নক করো

  • নাহ, এটা না

  • ২ নাম্বারে যাও

  • এটাও না

  • ৩... ৪... ৫... (হাঁফিয়ে উঠলে😓)

Approach 2: স্মার্ট স্টাইল 🚀

  • প্রথমে ৫০ নাম্বার ফ্ল্যাটে যাও

  • সৌরভের ফ্ল্যাট ৭৫ নাম্বার? ওকে, তাহলে ৫১-১০০ এর দিকে যাই

  • ৭৫ চেক করি... এরপর ৮৮... তারপর ৮২

  • এভাবে খুব তাড়াতাড়ি পৌঁছে যাবে!

Seconde Example:

কল্পনা করুন, আপনি একটি লাইব্রেরিতে একটি বই খুঁজছেন। লাইব্রেরিতে হাজার হাজার বই আছে, কিন্তু সৌভাগ্যবশত সেগুলি alphabetically সাজানো। এখন, আপনি কি প্রতিটি বই একে একে চেক করবেন? না, আপনি মাঝখানে গিয়ে দেখবেন, তারপর সিদ্ধান্ত নেবেন আপনার বইটি ডানে না বামে। এটাই হলো Binary Search এর মূল concept।

ধরুন আপনার বন্ধু ১ থেকে ১০০ এর মধ্যে একটি নাম্বার মনে করেছে। আপনাকে সেই নাম্বারটি guess করতে হবে। কিভাবে করবেন?

Inefficient approach: ১ থেকে শুরু করে একে একে সব নাম্বার guess করা

অন্য দিকেঃ Efficient approach (Binary Search):

  1. প্রথমে ৫০ guess করা

  2. যদি নাম্বারটি ৫০ এর চেয়ে বড় হয়, তবে ৫১-১০০ এর মধ্যে খোঁজা

  3. যদি ছোট হয়, তবে ১-৪৯ এর মধ্যে খোঁজা

  4. এভাবে range কে ধাপে ধাপে অর্ধেক করে কমিয়ে আনা

Binary Search এর মূলনীতি

Binary Search এর মূল কথা হলো "Divide and Conquer"। প্রতিবার সার্চ স্পেস কে দুই ভাগে ভাগ করে, আমরা ঠিক করি কোন দিকে যাবো।

1. Pre-requisites

  • Sorted Data: ডাটা অবশ্যই সাজানো থাকতে হবে

    • Phone Contacts: A থেকে Z

    • Numbers: ছোট থেকে বড় বা বড় থেকে ছোট

    • Dates: পুরনো থেকে নতুন বা নতুন থেকে পুরনো

2. Search Space

  • প্রতিবার সার্চ স্পেস অর্ধেক হয়

    • ১০০টা জিনিস -> ৫০টা -> ২৫টা -> ১৩টা -> ৭টা -> ৪টা -> ২টা -> ১টা
  • এভাবে খুব দ্রুত টার্গেট পাওয়া যায়

3. Decision Making

প্রতি ধাপে তিনটা সম্ভাবনা:

  1. Found: টার্গেট পেয়ে গেছি! 🎉

  2. Go Left: টার্গেট ছোট, বাম দিকে যাই ⬅️

  3. Go Right: টার্গেট বড়, ডান দিকে যাই ➡️

Why Binary Search is Amazing?

1. Speed Comparison

ধরো, ১০২৪টা জিনিস আছে:

  • Linear Search: সর্বোচ্চ ১০২৪ বার চেক

  • Binary Search: মাত্র ১০ বার! (2¹⁰ = 1024)

2. Real-world Benefits

  • Google Search suggestion

  • Auto-complete features

  • Database queries

  • Finding bugs in code (git bisect)

এখানেঃ

প্রথম স্টেপ:

  • পুরো অ্যারে দেখি

  • মাঝের এলিমেন্ট = 40

  • 60 বড় হওয়ায় ডান দিকে যাই

দ্বিতীয় স্টেপ:

  • শুধু ডান অংশ দেখি (50, 60, 70)

  • নতুন মাঝের এলিমেন্ট = 60

  • টার্গেট পেয়ে গেছি!

শেষ স্টেপ:

  • 60 পাওয়া গেছে

  • সার্চ শেষ!

Before We Code...

Mental Model টৈরি করি:

  1. Divide: অর্ধেক করে ভাগ করো

  2. Compare: মাঝের element এর সাথে compare করো

  3. Conquer: যে দিকে target, সেদিকে যাও

  4. Repeat: টার্গেট না পাওয়া পর্যন্ত repeat করো

Pseudo-code!

চলো এবার দেখি কিভাবে এটা কোড করা যায়:

Algorithm: BinarySearch
// ইনপুট হিসেবে একটি sorted array এবং খোঁজার target value নিবে
Input: sorted_array, target_value
// আউটপুট হিসেবে target এর position অথবা না পেলে -1 রিটার্ন করবে
Output: index of target_value or -1 if not found

Begin
    // বাম দিক থেকে শুরু করব, তাই left = 0
    set left = 0

    // ডান দিকের শেষ position (array এর length - 1)
    set right = length of sorted_array - 1

    // যতক্ষণ left right এর চেয়ে ছোট বা সমান থাকবে, ততক্ষণ লুপ চলবে
    while left <= right do
        // middle position বের করি
        // (right - left) / 2 করার কারণ: বড় নাম্বারের ক্ষেত্রে overflow এড়ানো
        set mid = left + (right - left) / 2

        // দেখি middle position এ আমাদের target আছে কিনা
        if sorted_array[mid] equals target_value then
            // target পেয়ে গেছি, এর position রিটার্ন করি
            return mid

        // যদি middle এর value target এর চেয়ে ছোট হয়
        // তাহলে target ডান দিকে আছে
        else if sorted_array[mid] < target_value then
            // left কে mid এর পরের position এ নিয়ে যাই
            set left = mid + 1

        // যদি middle এর value target এর চেয়ে বড় হয়
        // তাহলে target বাম দিকে আছে
        else
            // right কে mid এর আগের position এ নিয়ে যাই
            set right = mid - 1

    end while

    // এখানে আসার মানে target পাওয়া যায়নি
    // তাই -1 রিটার্ন করি
    return -1
End

আরও কিছু গুরুত্বপূর্ণ নোট:

  1. left <= right: এই condition না দিলে কিছু ক্ষেত্রে target miss করতে পারি

  2. mid + 1 এবং mid - 1: এই ১ যোগ/বিয়োগ না করলে infinite loop হতে পারে

  3. left + (right - left) / 2: এভাবে লেখার কারণ হল integer overflow এড়ানো

  4. -1 return: array তে element না থাকলে -1 return করি (programming এ এটা standard practice)

চলো Line by Line বুঝি 🔍

১. Initialize করা:

Copyset left = 0
set right = length of sorted_array - 1
  • left হচ্ছে আমাদের বাম দিকের সীমানা

  • right হচ্ছে ডান দিকের সীমানা

  • প্রথমে পুরো array কে consider করি

২. Middle Point ক্যালকুলেশন:

Copyset mid = left + (right - left) / 2

Special Note: আমরা (left + right) / 2 না লিখে left + (right - left) / 2 লিখি কেন?

  • Integer Overflow এড়াতে! বড় নাম্বার নিয়ে কাজ করার সময় এটা খুব important

আচ্ছা, চলুন mid = left + (right - left) / 2 এর পুরো বিষয়টা খুব সহজ করে বুঝি।

প্রথমে বুঝি - আমরা mid কেন দুইভাবে লিখতে পারি:

  1. mid = (left + right) / 2

  2. mid = left + (right - left) / 2

ধরি, আমাদের array তে ৫টা এলিমেন্ট আছে:

index:  0   1   2   3   4
value: [10, 20, 30, 40, 50]

এখন,

  • left = 0

  • right = 4

পদ্ধতি ১: (left + right) / 2

mid = (0 + 4) / 2
    = 4 / 2
    = 2

পদ্ধতি ২: left + (right - left) / 2

mid = 0 + (4 - 0) / 2
    = 0 + 4 / 2
    = 0 + 2
    = 2

দুইটা পদ্ধতিতেই একই উত্তর পেলাম। তাহলে দ্বিতীয় পদ্ধতি কেন ব্যবহার করি?

The Integer Overflow Problem

আসুন একটা বড় array নিয়ে চিন্তা করি:

left = 2,000,000,000
right = 2,000,000,100

পদ্ধতি ১: (left + right) / 2

mid = (2,000,000,000 + 2,000,000,100) / 2
    = 4,000,000,100 / 2
    ❌ PROBLEM! 4,000,000,100 is too big for integer!

পদ্ধতি ২: left + (right - left) / 2

mid = 2,000,000,000 + (2,000,000,100 - 2,000,000,000) / 2
    = 2,000,000,000 + 100 / 2
    = 2,000,000,000 + 50
    = 2,000,000,050
    ✅ WORKS PERFECTLY!

Summary:

  1. ছোট নাম্বারের ক্ষেত্রে দুইটা পদ্ধতিই কাজ করে

  2. কিন্তু বড় নাম্বারের ক্ষেত্রে:

    • (left + right) overflow করতে পারে

    • (right - left) কখনোই overflow করবে না (কারণ এটা always positive difference)

তাই সব সময় left + (right - left) / 2 ব্যবহার করা best practice!

৩. তিনটি কেস হ্যান্ডলিং:

Copyif sorted_array[mid] equals target_value then
    return mid
else if sorted_array[mid] < target_value then
    set left = mid + 1
else
    set right = mid - 1
  • Case 1: Bulls eye! টার্গেট পেয়ে গেছি

  • Case 2: টার্গেট বড়, ডানে যাও

  • Case 3: টার্গেট ছোট, বামে যাও

Time Complexity Analysis

  • Best Case: O(1) - একদম প্রথমেই পেয়ে গেলাম!

  • Average Case: O(log n) - প্রতিবার অর্ধেক করে কমছে

  • Worst Case: O(log n) - শেষ পর্যন্ত খুঁজতে হলো

একটু ম্যাথ করি:

  • ১০২৪ টা এলিমেন্ট থাকলে:

    • Linear Search: সর্বোচ্চ ১০২৪ বার চেক

    • Binary Search: মাত্র ১০ বার চেক! (2¹⁰ = 1024)

Common Mistakes to Avoid

  1. Unsorted Array: বাইনারি সার্চ শুধু sorted array তেই কাজ করে

  2. Infinite Loop: mid ক্যালকুলেশনে ভুল করলে হতে পারে

  3. Wrong Boundary Updates: left = mid বা right = mid ব্যবহার - এটা infinite loop create করতে পারে

Tips

  1. নিজে নিজে ট্রেস করো:

    • একটা ছোট array নাও

    • প্রতি step এ left, mid, right এর value লিখো

    • কিভাবে search space কমছে তা observe করো

  2. Edge Cases চেক করো:

    • Empty array

    • Single element array

    • Target not in the array

    • Duplicate elements

    • Target at boundaries

Binary Search vs Linear Search: A Deep Dive 🔍

In This Section we will learn:

  • দুটি সার্চ এর মূল পার্থক্য

  • Time & Space Complexity বিশ্লেষণ

  • বাস্তব জীবনে এদের ব্যবহার

🔴 লিনিয়ার সার্চ:

  • একে একে প্রতিটি এলিমেন্ট চেক করে

  • ৬টি ধাপে টার্গেট পায়

🟢 বাইনারি সার্চ:

  • মাঝখান থেকে শুরু করে

  • মাত্র ২টি ধাপে টার্গেট পায়

বাইনারি সার্চের সুবিধা

  1. দ্রুত খুঁজে পায়

  2. কম স্টেপ লাগে

  3. বড় ডাটা সেটে অনেক এফিসিয়েন্ট

দুটি সার্চের Main পার্থক্য

Memory Access Pattern

Linear Search:

CopyMemory Access: [1] -> [2] -> [3] -> [4] -> [5] -> [6]
               Sequential প্যাটার্নে মেমরি অ্যাক্সেস

Binary Search:

CopyMemory Access: [4] -> [2] -> [3]  অথবা  [4] -> [6] -> [5]
               Jump করে করে মেমরি অ্যাক্সেস

Cache Performance

Linear Search:

  • Cache-friendly (পাশাপাশি মেমরি লোকেশন অ্যাক্সেস করে)

  • CPU Prefetcher ভালোভাবে কাজ করে

  • ছোট ডাটাসেটে বেশি efficient

Binary Search:

  • Cache-unfriendly (রেন্ডম মেমরি লোকেশন অ্যাক্সেস করে)

  • CPU Prefetcher কম effective

  • বড় ডাটাসেটে এই overhead negligible

ধরো, আপনার দুই বন্ধু আছে - লিটু (Linear Search) আর বিটু (Binary Search)। তাদের একটা চ্যালেঞ্জ দেওয়া হলো: লাইব্রেরির ১০০টা বই থেকে "ডাটা স্ট্রাকচার" নামের বইটা খুঁজে বের করতে হবে। বইগুলো A-Z অনুযায়ী সাজানো।

লিটু: "আমি প্রথম বই থেকে শুরু করব!"
- "অ্যালগরিদম" - নাহ, এটা না
- "আর্টিফিশিয়াল ইন্টেলিজেন্স" - এটাও না
- "ইন্টারনেট" - না...
[একে একে প্রতিটা বই চেক করতে থাকে]

বিটুর পদ্ধতি (Binary Search):

বিটু: "আমি স্মার্টলি খুঁজব!"
- মাঝের বই দেখে ('ম' দিয়ে শুরু) - "ড" আগে আসে
- এবার প্রথম অর্ধেকের মাঝে ('চ' দিয়ে শুরু) - "ড" পরে আসে
- "চ" এবং "ম" এর মাঝামাঝি... 
[দ্রুত "ডাটা স্ট্রাকচার" পেয়ে যায়]

কে কত দ্রুত?

সময়ের খেলা

ধরো, প্রতি বই চেক করতে ১ সেকেন্ড লাগে:

লিটুর কেস:

ভাগ্য ভালো হলে (Best Case):
- প্রথমেই বই পেয়ে গেল
- মাত্র ১ সেকেন্ড! 

ভাগ্য খারাপ হলে (Worst Case):
- শেষের দিকে বা একদম শেষে বই
- ১০০ সেকেন্ড 

গড় ক্ষেত্রে (Average Case):
- মাঝামাঝি কোথাও বই
- ৫০ সেকেন্ড

বিটুর কেস:

সব ক্ষেত্রেই (Best, Average, Worst):
- প্রতিবার অর্ধেক জায়গা চেক করে
- ১০০ টা বইয়ের জন্য মাত্র ৭ বার চেক! (log₂1007)
- মাত্র ৭ সেকেন্ড! 🚀

🧠 মেমরি Managment

লিটুর মেমরি (Space Complexity: O(1))

শুধু একটা variable লাগে:
- বর্তমান position track করার জন্য

বিটুর মেমরি (Space Complexity: O(1))

তিনটা variable লাগে:
- left position
- right position
- middle position

Binary Search Performance Analysis

বাইনারি সার্চের Performance:

ধরি আমার কাছে ১-১০০ এর মধ্যে একটা নাম্বার আছে। আপনি কিভাবে খুঁজবেন?

পদ্ধতি ১: Linear Search

CopyPlayer: 1 কি?
Me: না, বড়
Player: 2 কি?
Me: না, বড়
Player: 3 কি?
Me: না, বড়
[এভাবে চলতে থাকবে... 😫]

পদ্ধতি ২: Binary Search

CopyPlayer: 50 কি?
Me: না, বড়
Player: 75 কি?
Me: না, ছোট
Player: 62 কি?
Me: হ্যাঁ! 🎉

Performance

1. Best Case

Copyখেলা: "১-১০০ এর মধ্যে একটা নাম্বার ধরি"
নাম্বার: 50

First Guess: 50
Bingo! একবারেই পেয়ে গেলাম!

2. Average Case

Copyখেলা: "১-১০০ এর মধ্যে একটা নাম্বার ধরি"
নাম্বার: 75

Guess 1: 50 (না, বড় হবে)
Guess 2: 75 (পেয়ে গেছি!)

3. Worst Case

Copyখেলা: "১-১০০ এর মধ্যে একটা নাম্বার ধরি"
নাম্বার: 99

Guess 1: 50 (না, বড় হবে)
Guess 2: 75 (না, বড় হবে)
Guess 3: 87 (না, বড় হবে)
Guess 4: 93 (না, বড় হবে)
Guess 5: 99 (পেয়ে গেছি!)

Remember

  1. Binary Search সব সময় দ্রুত, কিন্তু ডাটা সাজানো লাগবে

  2. যত বড় ডাটা, Binary Search তত বেশি এফিশিেন্ট

  3. ১০০০ টা জিনিস খুঁজতে মাত্র ১০ বার চেক!

Order-Agnostic Binary Search Flow

বিস্তারিত :

1. Start Node (সবুজ সার্কেল)

  • এটি আমাদের algorithm এর শুরু

  • এখান থেকে আমরা array input নিয়ে কাজ শুরু করব

2. Order Detection Box (নীল রেক্টাংগেল)

Copy- Input Array: [a1, a2, ..., an]
- Check: a1 vs an
- Purpose: Determine if ascending or descending

3. Decision Diamond (লাল ডায়মন্ড)

  • কন্ডিশন: arr[0] < arr[last]

  • দুইটি সম্ভাব্য পথ:

    • Yes (Left) -> Ascending

    • No (Right) -> Descending

4. Order Boxes

CopyAscending (সবুজ):
- উদাহরণ: [1, 2, 3, 4, 5]
- Property: প্রতিটি element আগেরটার চেয়ে বড়

Descending (কমলা):
- উদাহরণ: [5, 4, 3, 2, 1]
- Property: প্রতিটি element আগেরটার চেয়ে ছোট

5. Search Logic Box (বেগুনি)

  • Modified comparisons based on order

  • Binary Search implementation with order consideration

Search Process Comparison

Comparison Logic Table

CopyAscending Order:
IF target < mid THEN go left
IF target > mid THEN go right

Descending Order:
IF target < mid THEN go right
IF target > mid THEN go left

Decision Tree

বিস্তারিত :

1. Root Node (টপ নোড)

CopyPurpose: Order Detection
Check: arr[0] vs arr[last]
Example:
- arr[0] = 5, arr[last] = 1 -> Descending
- arr[0] = 1, arr[last] = 5 -> Ascending

2. First Level

CopyLeft Node (Ascending):
- When: arr[0] < arr[last]
- Example: [1, 2, 3, 4, 5]

Right Node (Descending):
- When: arr[0] > arr[last]
- Example: [5, 4, 3, 2, 1]

3. Second Level

CopyAscending Branch:
- Left Child: When target < mid
- Right Child: When target > mid

Descending Branch:
- Left Child: When target > mid
- Right Child: When target < mid

Digit Operations: ডিজিট অপারেশন পরিচিতি 🔍

Basic Digit Extraction (ডিজিট বের করা)

ডিজিট এক্সট্রাকশন :

CopyLast Digit: num % 10
Remove Last Digit: num / 10

উদাহরণ:

CopyNumber = 12345

Step 1: 12345 % 10 = 5
Step 2: 12345 / 10 = 1234
Step 3: 1234 % 10 = 4
Step 4: 1234 / 10 = 123
...এভাবে চলতে থাকবে

চলুন কয়েকটা কোড স্ট্রাকচার দেখি

সাধারণ ডিজিট এক্সট্রাকশন:

CopyAlgorithm: ExtractDigits
Input: number (An integer)
Output: Array of digits

Begin
    digits = empty array
    while number > 0 do
        digit = number % 10
        add digit to start of digits
        number = number / 10
    end while
    return digits
End

রিভার্স নাম্বার তৈরি:

CopyAlgorithm: ReverseNumber
Input: number
Output: Reversed number

Begin
    reversed = 0
    while number > 0 do
        digit = number % 10
        reversed = (reversed * 10) + digit
        number = number / 10
    end while
    return reversed
End

Let me explain Memory Representation in depth for digit operations.

ডিজিট অপারেশনে মেমরি রেপ্রেজেন্টেশন 🧠

মেমরি টাইপস Types of Memory

স্ট্যাক মেমরি Stack Memory

- প্রাইমারি ভ্যারিয়েবলস স্টোর করে
- LIFO (Last In First Out) প্রিন্সিপাল
- অটোমেটিক মেমরি ম্যানেজমেন্ট

Example:

int number = 12345;    // স্ট্যাকে 4 বাইট নেয়
int digit;            // আরও 4 বাইট স্ট্যাকে
int sum = 0;          // আরও 4 বাইট স্ট্যাকে

হিপ মেমরি Heap Memory

- ডায়নামিক অ্যারে স্টোর করে
- ম্যানুয়াল মেমরি ম্যানেজমেন্ট
- বড় ডাটা স্ট্রাকচার স্টোর করার জন্য

ডিজিট স্টোরেজ প্যাটার্ন

সিঙ্গেল ডিজিট স্টোরেজ

32-bit Integer Memory Layout:
[Byte 3][Byte 2][Byte 1][Byte 0]

একটি ডিজিট (0-9) স্টোর করার জন্য:

- মাত্র 4 বিট প্রয়োজন (0000 to 1001)
- কিন্তু 1 বাইট (8 বিট) ব্যবহার করা হয়
- বাকি বিটগুলো 0 দিয়ে পূরণ করা হয়

মাল্টি-ডিজিট নাম্বার স্টোরেজ

Example: 12345

Memory Layout:
[00000000][00000000][00110000][00111001]

Memory Operations মেমরি অপারেশনস

Digit Extraction Process ডিজিট এক্সট্রাকশন প্রসেস

Step 1: Original Number (12345)
Memory: [00000000][00000000][00110000][00111001]

Step 2: Get Last Digit (12345 % 10 = 5)
- Modulo Operation
- Register Operation
- Result in New Memory Location

Step 3: Remove Last Digit (12345 / 10 = 1234)
- Division Operation
- Bit Shifting
- Update Original Memory

অ্যারে স্টোরেজ

int[] digits = new int[5];  // Heap Memory Allocation

Memory Layout:
[1][2][3][4][5]
↓  ↓  ↓  ↓  ↓
0xA1 0xA2 0xA3 0xA4 0xA5 (Memory Addresses)

মেমরি অপটিমাইজেশন টেকনিক 🎯

ইন-প্লেস অপারেশন

// Bad Practice (Extra Memory)
int temp = number;
while (temp > 0) {
    digit = temp % 10;
    temp /= 10;
}

// Good Practice (In-place)
while (number > 0) {
    digit = number % 10;
    number /= 10;
}

বাইনারি সার্চ শেখার এই যাত্রায় আমরা অনেক কিছুই জানলাম। শুরু করেছিলাম সাধারণ বাইনারি সার্চ দিয়ে দেখলাম কিভাবে একটি সিম্পল algorithm আমাদের দৈনন্দিন প্রোগ্রামিং life কে সহজ করে দিতে পারে।

Key Takeaways

  • বাইনারি সার্চ হল একটি efficient searching technique

  • এটি log(n) টাইম কমপ্লেক্সিটিতে কাজ করে

  • Sorted array তে খোঁজার জন্য এটি best choice

  • Order-Agnostic version যেকোনো order এ কাজ করে

"The more you practice, the more patterns you'll recognize!"

Happy Coding! See you in the next time!

#DSA #BinarySearch #Programming #CodingLife #ProblemSolving