Divide-and-Conquer এলগরিদমে রিকারশন এর ব্যবহার

রিকারশন এবং রিকারেন্স রিলেশন (Recursion and Recurrence Relations) - ডিসক্রিট ম্যাথমেটিক্স (Discrete Mathematics) - Computer Science

254

ডিভাইড-অ্যান্ড-কনকোয়ার (Divide-and-Conquer) অ্যালগরিদমে রিকারশন গুরুত্বপূর্ণ ভূমিকা পালন করে। ডিভাইড-অ্যান্ড-কনকোয়ার পদ্ধতি মূল সমস্যাটিকে কয়েকটি উপ-সমস্যায় ভাগ করে, প্রতিটি উপ-সমস্যাকে সমাধান করে এবং শেষে সমাধানগুলোকে একত্রিত করে মূল সমস্যার সমাধান তৈরি করে। এই পদ্ধতিতে রিকারশন স্বাভাবিকভাবেই ব্যবহৃত হয় কারণ উপ-সমস্যাগুলোকে বারবার একইভাবে ভাগ এবং সমাধান করার মাধ্যমে চূড়ান্ত সমাধানে পৌঁছানো সম্ভব হয়।

ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশনের ধাপসমূহ


ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে সাধারণত তিনটি ধাপ থাকে:

  1. Divide: মূল সমস্যাটিকে ছোট ছোট উপ-সমস্যায় ভাগ করা হয়।
  2. Conquer: প্রতিটি উপ-সমস্যার জন্য রিকারশনের মাধ্যমে সমাধান খোঁজা হয়।
  3. Combine: উপ-সমস্যাগুলোর সমাধানগুলোকে একত্রিত করে মূল সমস্যার সমাধান তৈরি করা হয়।

রিকারশনের মাধ্যমে ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমের উদাহরণ


উদাহরণ ১: মার্জ সর্ট (Merge Sort)

মার্জ সর্ট একটি ডিভাইড-অ্যান্ড-কনকোয়ার ভিত্তিক সাজানোর অ্যালগরিদম, যা মূলত রিকারশন ব্যবহার করে।

  1. Divide: অ্যারের মাঝখানে ভাগ করে দুটি উপ-অ্যারে তৈরি করা হয়।
  2. Conquer: প্রতিটি উপ-অ্যারের জন্য রিকারশনের মাধ্যমে মার্জ সর্ট প্রয়োগ করা হয়।
  3. Combine: সাজানো উপ-অ্যারেগুলো একত্রিত করে চূড়ান্ত সাজানো অ্যারে তৈরি করা হয়।

উদাহরণ কোড:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left_half = merge_sort(arr[:mid])
    right_half = merge_sort(arr[mid:])

    return merge(left_half, right_half)

def merge(left, right):
    sorted_array = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            sorted_array.append(left[i])
            i += 1
        else:
            sorted_array.append(right[j])
            j += 1

    sorted_array.extend(left[i:])
    sorted_array.extend(right[j:])

    return sorted_array

এখানে merge_sort ফাংশনটি নিজেকে বারবার ডেকে ছোট ছোট উপ-অ্যারে সাজিয়ে চূড়ান্ত সাজানো অ্যারে তৈরি করে।

উদাহরণ ২: কুইক সর্ট (Quick Sort)

কুইক সর্ট একটি ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদম যা পিভট নির্বাচন করে এবং পিভটের চারপাশে উপ-অ্যারে ভাগ করে রিকারশন ব্যবহার করে সমাধান করে।

  1. Divide: পিভট উপাদানের উপর ভিত্তি করে অ্যারেটিকে দুটি উপ-অ্যারে ভাগ করা হয়।
  2. Conquer: প্রতিটি উপ-অ্যারে কুইক সর্ট রিকারশন প্রয়োগ করে।
  3. Combine: রিকারশনের প্রতিটি ধাপে উপ-অ্যারে সাজানো অবস্থায় পুনঃসংযোগ করা হয়।

উদাহরণ কোড:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]

    return quick_sort(left) + middle + quick_sort(right)

এখানে quick_sort ফাংশনটি প্রতিটি পিভটের উপর ভিত্তি করে রিকারশন প্রয়োগ করে এবং উপ-অ্যারেগুলোকে পুনরায় একত্রিত করে সাজানো অ্যারে তৈরি করে।

ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশনের সুবিধা


  1. সহজভাবে সমস্যা সমাধান: বড় সমস্যাগুলিকে ছোট ছোট উপ-সমস্যায় ভেঙে রিকারশন ব্যবহার করে সহজে সমাধান করা যায়।
  2. কোড সংক্ষিপ্ত ও পাঠযোগ্য: রিকারশন ব্যবহার করে কোডের জটিলতা কমানো যায় এবং কোড সহজেই পাঠযোগ্য হয়।
  3. বিভিন্ন সমস্যায় ব্যবহারযোগ্যতা: মার্জ সর্ট, কুইক সর্ট, বাইনারি সার্চের মতো অ্যালগরিদমে রিকারশন ব্যবহৃত হয় যা অনেক ধরনের সমস্যার সমাধানে কার্যকরী।

ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশন একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং এটি সমস্যাকে সহজে সমাধানযোগ্য করে তোলে, বিশেষ করে বড় ডেটা সেটে।

Content added By
Promotion

Are you sure to start over?

Loading...