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

অ্যারে রিমুভ করার ন্যূনতম অপারেশন C++-তে


বিবরণ

N ইন্টিজারের একটি অ্যারে দেওয়া আছে যেখানে N জোড় সংখ্যা। অ্যারেতে দুটি ধরণের অপারেশন অনুমোদিত।

  • অ্যারের যেকোনো এলিমেন্টের মান ১ বাড়ানো।
  • যদি অ্যারেতে দুটি সন্নিহিত এলিমেন্ট কনsekutিভ প্রাইম নম্বর হয়, তবে উভয় মুছে ফেলা।

কাজ হলো অ্যারের সব এলিমেন্ট মুছে ফেলার ন্যূনতম অপারেশন বের করা।

উদাহরণ

অ্যারে {10, 13} হলে ন্যূনতম ২ অপারেশন দরকার:

  • ১ম এলিমেন্ট ১ বাড়িয়ে {11, 13} করা।
  • ১ম ও ২ম এলিমেন্ট মুছে ফেলা কারণ দুটোই কনsekutিভ প্রাইম।

অ্যালগরিদম

1. নম্বর মুছে ফেলার জন্য দুটি নম্বর কনsekutিভ প্রাইম করতে হবে।
2. মনে করুন a এবং b কনsekutিভ প্রাইম। সিভ অফ এরাটোস্থিনিস দিয়ে প্রাইম নম্বর প্রিকম্পিউট করুন এবং a-র চেয়ে বড় প্রথম প্রাইম p এবং p-র চেয়ে বড় প্রাইম বের করুন।
3. একবার কম্পিউটেশন হলে ডাইনামিক প্রোগ্রামিং দিয়ে সমস্যা সমাধান করুন।

উদাহরণ

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int minimumPrefixReversals(int *a, int n) {
    string start = "";
    string destination = "", t, r;
    for (int i = 0; i < n; i++) {
        start += to_string(a[i]);
    }
    sort(a, a + n);
    for (int i = 0; i < n; i++) {
        destination += to_string(a[i]);
    }
    queue> qu;
    pair p;
    qu.push(make_pair(start, 0));
    if (start == destination) {
        return 0;
    }
    while (!qu.empty()) {
        p = qu.front();
        t = p.first;
        qu.pop();
        for (int j = 2; j <= n; j++) {
            r = t;
            reverse(r.begin(), r.begin() + j);
            if (r == destination) {
                return p.second + 1;
            }
            qu.push(make_pair(r, p.second + 1));
        }
    }
}
int main() {
    int a[] = { 1, 2, 4, 3 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << "Minimum reversal: " << minimumPrefixReversals(a, n) << endl;
    return 0;
}

উপরের প্রোগ্রাম কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট জেনারেট হবে:

আউটপুট

Minimum reversal: 3

  1. C++ ব্যবহার করে অ্যারের সব এলিমেন্ট ডিলিট করতে ন্যূনতম অপারেশন সংখ্যা

  2. C++-এ অ্যারের GCD কে k-এর গুণিতক বানানোর ন্যূনতম অপারেশন

  3. C++-এ কো-প্রাইম অ্যারে बनाने জন্য ন্যূনতম ইনসারশন

  4. C++-এ অ্যারের সব এলিমেন্ট একই করার জন্য ন্যূনতম ডিলিট অপারেশন