একটি অ্যালগরিদম হলো কোনো সমস্যা সমাধানের জন্য নির্দেশাবলীর সেট। এখানে আমরা অ্যারে রোটেশনের জন্য রিভার্সাল অ্যালগরিদম নিয়ে আলোচনা করব এবং এর প্রোগ্রাম তৈরি করব।
জানতে হবে কিছু টার্ম:
অ্যারে (Array) − একই ডেটা টাইপের এলিমেন্টের কন্টেইনার। অ্যারের আকার (এলিমেন্ট সংখ্যা) ডিক্লেয়ারেশন সময় ফিক্সড থাকে।
অ্যারে রোটেশন (Array Rotation) − অ্যারের এলিমেন্টের ক্রম পরিবর্তন করা। এলিমেন্টের ইন্ডেক্স ১ বাড়ানো এবং শেষ এলিমেন্টের ইন্ডেক্স ০ করা — এভাবে চলতে থাকে।
অ্যারে রোটেশনের উদাহরণ:
Array[] = {3, 6, 8, 1, 4, 10}
Rotated 2 times gives:
Array[] = {1, 4, 10, 3, 6, 8}
রিভার্সাল অ্যালগরিদম (Reversal Algorithm)
অ্যারে রোটেশনের এক জনপ্রিয় অ্যালগরিদম হলো রিভার্সাল অ্যালগরিদম। এতে সাব-অ্যারে তৈরি করে সেগুলো রিভার্স করে রোটেশন করা হয়। সাব-অ্যারেগুলো আলাদা আলাদা রিভার্স করা হয়, তারপর একসাথে জয়েন করে আবার রিভার্স করে ফাইনাল রোটেটেড অ্যারে পাওয়া যায়।
অ্যালগরিদম
Input: array arr[], রোটেট করার পজিশন r, অ্যারের দৈর্ঘ্য n. Step 1: অ্যারেকে দুটি সাব-অ্যারেতে ভাগ করুন: 0 থেকে (d-1) এবং d থেকে (n-1), অর্থাৎ a1[d] এবং a2[n-d]। Step 2: উভয় অ্যারে রিভার্স মেথড দিয়ে রিভার্স করুন। Step 3: a1 এবং a2 কে আবার জয়েন করুন মূল আকারের অ্যারে পাওয়ার জন্য। Step 4: এই জয়েন করা অ্যারেটি রিভার্স করুন রোটেটেড অ্যারে পাওয়ার জন্য। Step 5: স্ট্যান্ডার্ড আউটপুট মেথড দিয়ে অ্যারে প্রিন্ট করুন।
উদাহরণ:
arr[] = {1, 4, 2, 8, 3, 6, 5}, d = 3, n = 7
a1[] = {1, 4, 2}; a2 = {8, 3, 6, 5}
a1r[] = {2, 4, 1} // reversed a1
a2r[] = {5, 6, 3, 8} // reversed a2
ar[] = {2, 4, 1, 5, 6, 3, 8} // a1r + a2r
arr[] = {8, 3, 6, 5, 1, 4, 2} // final answer
সি প্রোগ্রাম
#include <stdio.h>
void reverse(int arr[], int start, int end) {
int temp;
while (start < end) {
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
int main() {
int arr[] = {54, 67, 12, 76, 25, 16, 34};
int n = 7;
int d = 2;
printf("The initial array is:\n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
reverse(arr, 0, d - 1);
reverse(arr, d, n - 1);
reverse(arr, 0, n - 1);
printf("\nThe left reversed array by %d elements is:\n", d);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
আউটপুট
The initial array is: 54 67 12 76 25 16 34 The left reversed array by 2 elements is: 12 76 25 16 34 54 67