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

C++ প্রোগ্রাম: দিয়ে गये সিকোয়েন্স থেকে লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্স খুঁজে বের করা

লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্স (LIS) হলো একটি সাবসিকোয়েন্স যেখানে প্রতিটি উপাদান তার আগের উপাদানের চেয়ে বড়।

এখানে আমরা একটি ইন্টিজার সেট থেকে লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্সের দৈর্ঘ্য নির্ণয় করব।

ইনপুট: একটি ইন্টিজার সেট। {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}
আউটপুট: লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্সের দৈর্ঘ্য। এখানে এটি ৬। সাবসিকোয়েন্সটি হলো 0, 2, 6, 9, 13, 15।

অ্যালগরিদম

longestSubSeq(subarray, n)

ইনপুট: সাব অ্যারে এবং এর আকার।

আউটপুট: লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্সের দৈর্ঘ্য।

শুরু
  length নামক অ্যারে ডিক্লেয়ার করুন আকার n দিয়ে
  length-র সব এন্ট্রি ০ দিয়ে ইনিশিয়ালাইজ করুন
  for i := 1 to n-1, করুন
    for j := 0 to i-1, করুন
      if subarray[j] < subarray[i] এবং length[j] > length[i], তবে
        length[i] := length[j]
    লুপ শেষ
    length[i] ১ বাড়ান
  লুপ শেষ
  lis := 0
  for i := 0 to n-1, করুন
    lis := lis এবং length[i]-র ম্যাক্সিমাম
  লুপ শেষ
  return lis
শেষ

উদাহরণ কোড

#include <iostream>
using namespace std;

int longestSubSeq(int subArr[], int n) {
    int length[n] = { 0 }; // সব length ০ সেট
    length[0] = 1; // subArr[0] দিয়ে শেষ হওয়া সাবসিকোয়েন্স ১
    for (int i = 1; i < n; i++) {
        // প্রথম ক্যারেক্টার বাদ দিয়ে দ্বিতীয় থেকে সব
        for (int j = 0; j < i; j++) {
            // subArr[j] দিয়ে শেষ হওয়া সাবসিকোয়েন্স
            if (subArr[j] < subArr[i] && length[j] > length[i])
                length[i] = length[j];
        }
        length[i]++; // arr[i] যোগ
    }
    int lis = 0;
    for (int i = 0; i < n; i++) // লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্স খুঁজুন
        lis = max(lis, length[i]);
    return lis;
}

int main() {
    int arr[] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
    int n = 16;
    cout << "Length of Longest Increasing Subsequence is: " << longestSubSeq(arr, n);
    return 0;
}

আউটপুট

Length of Longest Increasing Subsequence is: 6
  1. C++ প্রোগ্রাম: টিম সদস্যের সূচক সিকোয়েন্স বের করা (বিচ্ছিন্ন রেটিং)েন

  2. C++ প্রোগ্রাম: গ্রাফে ব্রিজ এজের সংখ্যা নির্ণয়

  3. C++-এ সিকোয়েন্স সেটে লংগেস্ট কমন প্রিফিক্স (Longest Prefix Matching) খুঁজে বের করা

  4. C++-এ সিকোয়েন্স সেটে লংগেস্ট কমন সাবসিকোয়েন্স (LCS) খুঁজে বের করা