ডিভাইড-অ্যান্ড-কনকোয়ার (Divide-and-Conquer) অ্যালগরিদমে রিকারশন গুরুত্বপূর্ণ ভূমিকা পালন করে। ডিভাইড-অ্যান্ড-কনকোয়ার পদ্ধতি মূল সমস্যাটিকে কয়েকটি উপ-সমস্যায় ভাগ করে, প্রতিটি উপ-সমস্যাকে সমাধান করে এবং শেষে সমাধানগুলোকে একত্রিত করে মূল সমস্যার সমাধান তৈরি করে। এই পদ্ধতিতে রিকারশন স্বাভাবিকভাবেই ব্যবহৃত হয় কারণ উপ-সমস্যাগুলোকে বারবার একইভাবে ভাগ এবং সমাধান করার মাধ্যমে চূড়ান্ত সমাধানে পৌঁছানো সম্ভব হয়।
ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশনের ধাপসমূহ
ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে সাধারণত তিনটি ধাপ থাকে:
- Divide: মূল সমস্যাটিকে ছোট ছোট উপ-সমস্যায় ভাগ করা হয়।
- Conquer: প্রতিটি উপ-সমস্যার জন্য রিকারশনের মাধ্যমে সমাধান খোঁজা হয়।
- Combine: উপ-সমস্যাগুলোর সমাধানগুলোকে একত্রিত করে মূল সমস্যার সমাধান তৈরি করা হয়।
রিকারশনের মাধ্যমে ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমের উদাহরণ
উদাহরণ ১: মার্জ সর্ট (Merge Sort)
মার্জ সর্ট একটি ডিভাইড-অ্যান্ড-কনকোয়ার ভিত্তিক সাজানোর অ্যালগরিদম, যা মূলত রিকারশন ব্যবহার করে।
- Divide: অ্যারের মাঝখানে ভাগ করে দুটি উপ-অ্যারে তৈরি করা হয়।
- Conquer: প্রতিটি উপ-অ্যারের জন্য রিকারশনের মাধ্যমে মার্জ সর্ট প্রয়োগ করা হয়।
- 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)
কুইক সর্ট একটি ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদম যা পিভট নির্বাচন করে এবং পিভটের চারপাশে উপ-অ্যারে ভাগ করে রিকারশন ব্যবহার করে সমাধান করে।
- Divide: পিভট উপাদানের উপর ভিত্তি করে অ্যারেটিকে দুটি উপ-অ্যারে ভাগ করা হয়।
- Conquer: প্রতিটি উপ-অ্যারে কুইক সর্ট রিকারশন প্রয়োগ করে।
- 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 ফাংশনটি প্রতিটি পিভটের উপর ভিত্তি করে রিকারশন প্রয়োগ করে এবং উপ-অ্যারেগুলোকে পুনরায় একত্রিত করে সাজানো অ্যারে তৈরি করে।
ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশনের সুবিধা
- সহজভাবে সমস্যা সমাধান: বড় সমস্যাগুলিকে ছোট ছোট উপ-সমস্যায় ভেঙে রিকারশন ব্যবহার করে সহজে সমাধান করা যায়।
- কোড সংক্ষিপ্ত ও পাঠযোগ্য: রিকারশন ব্যবহার করে কোডের জটিলতা কমানো যায় এবং কোড সহজেই পাঠযোগ্য হয়।
- বিভিন্ন সমস্যায় ব্যবহারযোগ্যতা: মার্জ সর্ট, কুইক সর্ট, বাইনারি সার্চের মতো অ্যালগরিদমে রিকারশন ব্যবহৃত হয় যা অনেক ধরনের সমস্যার সমাধানে কার্যকরী।
ডিভাইড-অ্যান্ড-কনকোয়ার অ্যালগরিদমে রিকারশন একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং এটি সমস্যাকে সহজে সমাধানযোগ্য করে তোলে, বিশেষ করে বড় ডেটা সেটে।
Read more