কম্পিউটার টিউটোরিয়াল

সি প্রোগ্রামিং-এ রিভার্সাল অ্যালগরিদম দিয়ে অ্যারে রোটেশন


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

জানতে হবে কিছু টার্ম:

অ্যারে (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

  1. সি++ প্রোগ্রাম: অপ্টিমাল পেজ রিপ্লেসমেন্ট অ্যালগরিদম

  2. C++ প্রোগ্রাম: অ্যারে উপাদানগুলোর গুণফল বের করা

  3. কাউন্টিং সর্টের পাইথন প্রোগ্রাম

  4. অ্যারে রোটেশনের পাইথন প্রোগ্রাম