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

C++-এ ডিরেঞ্জমেন্ট (Derangement) গণনা

ডিরেঞ্জমেন্ট হলো N সংখ্যার পারমুটেশন যাতে কোনো সংখ্যাও তার অরিজিনাল পজিশনে থাকে না। উদাহরণ: {1,2,3} এর একটি ডিরেঞ্জমেন্ট {2,3,1}। লক্ষ্য N সংখ্যার জন্য সম্ভাব্য ডিরেঞ্জমেন্টের সংখ্যা গণনা করা।

রিকার্সিভ সমাধান:

  • N=0: 1 (কনভেনশন)
  • N=1: 0
  • N=2: 1 (সুইপ {2,1})
  • N=3: 2 ({2,3,1}, {3,1,2})
  • N=4: 9
  • N: (N-1) * (derangements(N-1) + derangements(N-2))

লজিক: ০ নম্বর ইন্ডেক্সের এলিমেন্ট n-1 জায়গায় যেতে পারে। যদি i-ইন্ডেক্সের এলিমেন্ট ০-তে যায় তবে স্ব্যাপ হয়, বাকি n-2 এর জন্য ক্যালকুলেশন। না হলে n-1 এলিমেন্টের জন্য n-2 চয়েস।

ইনপুট

Arr[] = { 1, 2 }

আউটপুট

No. of derangements : 1

ইনপুট

Arr[] = { 1, 2, 3 }

আউটপুট

No. of derangements : 2

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • Num = সংখ্যা কাউন্ট।
  • derangements(int N) রিকার্সিভ ফাংশন।
  • বেইস কেস N=0,1,2 হ্যান্ডেল।
  • N>2 হলে ফর্মুলা দিয়ে রিকার্সিভ কল।
  • ব্যাকট্র্যাকিং-এ কাউন্ট কম্পিউট হয়।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

int derangements(int N){
    if (N == 0) return 1;
    if (N == 1) return 0;
    if (N == 2) return 1;
    return (N - 1) * (derangements(N - 1) + derangements(N - 2));
}

int main(){
    int Numbers = 5;
    cout << "Number of Derangements :" << derangements(Numbers);
    return 0;
}

আউটপুট

Number of Derangements :44
  1. C++-এ স্বরবর্ণ পারমুটেশন গণনা (Count Vowels Permutation)

  2. C++-এ মডিফাইড নাইটের পৌঁছানো সম্ভাব্য পজিশন গণনা

  3. সর্বনিম্ন x খুঁজে বের করা যাতে (x % k) * (x / k) == n C++-তে

  4. C++ প্রোগ্রাম: 'k' বের করা যাতে অ্যারে সব উপাদানের সাথে মডুলাস সমান