কম্পিউটার

C++ এ একটি সহযোগী ক্রিয়াকলাপের সাথে n উপাদানগুলিকে গুণ করার উপায়


এই সমস্যায়, আমাদেরকে একটি পূর্ণসংখ্যা n দেওয়া হয়েছে যা উপাদানের সংখ্যা। আমাদের কাজ হল এমন একটি প্রোগ্রাম তৈরি করা যা অ্যাসোসিয়েটিভ অপারেশনের সাথে n উপাদানগুলিকে গুণ করার উপায় গণনা করে৷

অ্যাসোসিয়েটিভ অপারেশন সংখ্যাগুলি যেভাবে সাজানো হোক না কেন একই ফলাফল দিন৷

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

3

আউটপুট

12

ব্যাখ্যা

(x*(y*z)), (x*(z*y)), (y*(x*z)), (y*(z*x)), (z*(x*y)), (z*(y*x)),
((x*y)*z), ((y*x)*z), ((x*z)*y), ((z*x)*y), ((z*y)*x), ((y*z)*x).

এই সমস্যাটি সমাধান করার জন্য, আমরা আমাদের ফলাফলগুলিকে সাধারণীকরণ করতে পারি এমন কোনও সম্পর্ক বা কোনও ধরণের সিরিজ তৈরি করা যেতে পারে কিনা তা খুঁজে বের করার চেষ্টা করব। চলুন অপারেটরের সংখ্যার উপর ভিত্তি করে সহযোগী অপারেশনের সংখ্যা দেখি -

1 => 1
2 => 2
3 => 12

এখন, গণনাটি সাধারণ করার চেষ্টা করা যাক। ধরা যাক, আমরা তখন n উপাদানের জন্য সহযোগী ক্রিয়াকলাপ তৈরি করছি, আমরা n-1 গুণক অপারেটর এবং n-1 বন্ধনী স্থাপন করতে পারি।

এখানে, আমরা সেগুলিকে দুটি উপায়ে সাজাব -

  • (n-1 পর্যন্ত গুন করার উপায় বিবেচনা করা হচ্ছে ) এবং তারপর আমরা শেষ উপাদান সন্নিবেশ করতে পারেন অ্যাসোসিয়েশনের যে কোনো প্রান্তে an. এটি n-1 নম্বরের জন্য 2*2*(n-2) অ্যাসোসিয়েশন থেকে n অপারেটরদের জন্য হতে পারে।

  • তারপরে আমরা (a1, a2, … a(n-1)) এবং মাল্টিপল an-এর বাম বা ডানে গুণন বিবেচনা করব যা অ্যাসোসিয়েশন তৈরি করার অতিরিক্ত দুটি উপায় দেয়।

আসুন উপরের কেসটি ব্যবহার করে n অপারেটরদের জন্য মোট অ্যাসোসিয়েশন যোগ করি এবং পান।

ass(n) = ((2*2*(n-2))(ass(n-1))) + 2*(ass(n-1))
ass(n) = (4n-8)(ass(n-1)) + 2*(ass(n-1))
ass(n) = (4n-6)(ass(n-1))

এই সম্পর্কটি ছদ্ম কাতালান নম্বরের মতো, যার একই সূত্র এবং একই আদ্যক্ষর মান রয়েছে।

সুতরাং, আমরা এখানে ছদ্ম কাতালান নম্বরের জন্য সাধারণ সূত্র প্রয়োগ করতে পারি,

ass(n) = (2*n-2)!/(n-1)!

আসুন n =5.

মানের জন্য আমাদের সূত্রের কাজ দেখি
ass(10) = (2*5 - 2)!/ (5-1)!
ass(10) = 8!/4! = 40320/24 = 1680

একটি সহযোগী ক্রিয়াকলাপের সাথে n উপাদানগুলিকে গুণ করার উপায়গুলি সন্ধান করার জন্য প্রোগ্রাম

// একটি সহযোগী ক্রিয়াকলাপের সাথে n উপাদানগুলিকে গুণ করার উপায় খুঁজে বের করার জন্য প্রোগ্রাম -

উদাহরণ

#include<iostream>
using namespace std;
long int calcFactorial(int n){
   if (n == 0 || n == 1)
      return 1 ;
   return n*calcFactorial(n-1);
}
long int calcWays ( int n ){
   int N = 2*n - 2 ;
   int R = n - 1 ;
   return (calcFactorial((2*n)-2)/calcFactorial(n-1));
}
int main(){
   int n = 7;
   cout<<"The ways to multiply "<<n<<" elements with an associative operation : "<<calcWays(n);
   return 0 ;
}

আউটপুট

The ways to multiply 7 elements with an associative operation : 665280

  1. C++ এ 3n স্লাইস সহ পিৎজা

  2. C++-এ অ্যারেতে সমস্ত উপাদান সমান করার জন্য ন্যূনতম অপারেশন

  3. C++ এ O(1) স্পেসে 0 থেকে N-1 উপাদান সহ ধ্রুবক অ্যারেতে সদৃশগুলি খুঁজুন

  4. C++ এ প্রাইম ফ্রিকোয়েন্সি সহ অ্যারে উপাদান?