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

সি++-এ বাইনারি ট্রি গণনা (Enumeration of Binary Trees)


বাইনারি ট্রি গণনা হলো একটি নির্দিষ্ট আকারের (নির্দিষ্ট নোড সংখ্যা) স্বতন্ত্র আনলেবেলড বাইনারি ট্রির মোট সংখ্যা গণনা। এই আর্টিকেলে আমরা n নোডের বাইনারি ট্রির সংখ্যা গণনা করার প্রোগ্রাম তৈরি করব।

নোড লেবেলিংের ভিত্তিতে বাইনারি ট্রি দুই ধরনের:

  • লেবেলড বাইনারি ট্রি
  • আনলেবেলড বাইনারি ট্রি

লেবেলড বাইনারি ট্রি: এটি একটি বাইনারি ট্রি যেখানে ট্রির নোডগুলো মান দিয়ে লেবেল করা থাকে।

নির্দিষ্ট নোড সংখ্যার জন্য ভিন্ন লেবেলড বাইনারি ট্রির ধরন:

নোড সংখ্যা N = 2

এভাবেই, N সংখ্যক নোডের জন্য স্বতন্ত্র লেবেলড বাইনারি ট্রির সংখ্যা বের করা যায়,

N = 1, গণনা = ১
N = 2, গণনা = ৪
N = 3, গণনা = ৩০
N = 4, গণনা = ৩৩৬

এখানে, আমরা দেখতে পাই লেবেলড নোডের জন্য আনলেবেলড নোডের সব অরেঞ্জমেন্ট করা হয়। তাই গণনা হবে n! * আনলেবেলড বাইনারি ট্রির গণনা।

C(N) = n! * ( (2n!) / (n+1)! * n! ) )

নির্দিষ্ট নোড সংখ্যা N-এর জন্য স্বতন্ত্র আনলেবেলড বাইনারি ট্রির সংখ্যা বের করার প্রোগ্রাম

#include <iostream> 
using namespace std; 

int fact(int n){ 
    if(n == 1) 
        return 1; 
    return n * fact(n - 1); 
} 

int distinctCountLabeledTree(int N){ 
    return ( (fact(N))*( fact(2*N) / ( fact(N+1)*fact(N)) ) ) ; 
} 

int main(){ 
    int N = 6; 
    cout << "The number of Distinct labeled Binary Tree is " << distinctCountLabeledTree(N); 
    return 0; 
}

আউটপুট

The number of Distinct labeled Binary Tree is 95040

আনলেবেলড বাইনারি ট্রি: এটি একটি বাইনারি ট্রি যেখানে ট্রির নোডগুলো কোনো মান দিয়ে লেবেল করা থাকে না।

নির্দিষ্ট নোড সংখ্যার জন্য ভিন্ন আনলেবেলড বাইনারি ট্রির ধরন:

নোড সংখ্যা N = 2

স্বতন্ত্র আনলেবেলড বাইনারি ট্রির সংখ্যা = ২

এভাবেই, N-এর জন্য স্বতন্ত্র আনলেবেলড বাইনারি ট্রির সংখ্যা বের করা যায়।

N = 1, গণনা = ১
N = 2, গণনা = ২
N = 3, গণনা = ৫
N = 4, গণনা = ১৪

এটি ক্যাটালান নম্বর দ্বারা দেওয়া হয়,

C(N) = (2n!) / (n+1)! * n!

নির্দিষ্ট নোড সংখ্যা N-এর জন্য স্বতন্ত্র আনলেবেলড বাইনারি ট্রির সংখ্যা বের করার প্রোগ্রাম

#include <iostream> 
using namespace std; 

int fact(int n){ 
    if(n == 1) 
        return 1; 
    return n * fact(n - 1); 
} 

int distinctCount(int N){ 
    return ( fact(2*N) / ( fact(N+1)*fact(N) ) ); 
} 

int main(){ 
    int N = 7; 
    cout << "The number of Distinct unlabeled Binary Tree is " << distinctCount(N); 
    return 0; 
}

আউটপুট

The number of Distinct unlabeled Binary Tree is 6
  1. C++-এ ইউনিক বাইনারি সার্চ ট্রি গণনা

  2. C++-এ ইউনিক বাইনারি সার্চ ট্রি II - সব ট্রি জেনারেট করা

  3. C++-এ দুটি বাইনারি ট্রি মার্জ করা

  4. বাইনারি সার্চ C++ প্রোগ্রামে