কম্পিউটার

প্যালিনড্রোম পার্টিশনিং


এই অ্যালগরিদমে, ইনপুটটি একটি স্ট্রিং, সেই স্ট্রিংটির একটি পার্টিশন হল প্যালিনড্রোম পার্টিশনিং যখন পার্টিশনের প্রতিটি সাবস্ট্রিং একটি প্যালিনড্রোম হয়৷

এই অ্যালগরিদমে, প্রদত্ত স্ট্রিংটিকে প্যালিনড্রোম পার্টিশন করার জন্য আমাদের ন্যূনতম কাটগুলি খুঁজে বের করতে হবে৷

ইনপুট এবং আউটপুট

Input:
A string. Say “ababbbabbababa”
Output:
Minimum cut to partition as palindrome. Here 3 cuts are needed.
The palindromes are: a | babbbab | b | ababa

অ্যালগরিদম

minPalPart(str)

ইনপুট: প্রদত্ত স্ট্রিং।

আউটপুট: স্ট্রিং থেকে প্যালিনড্রোমিক পার্টিশনের ন্যূনতম সংখ্যা।

Begin
   n := length of str
   define cut matrix and pal matrix each of order n x n

   for i := 0 to n, do
      pal[i, i] := true
      cut[i, i] := 0
   done

   for len in range 2 to n, do
      for i in range 0 to n – len, do
         j := i + len – 1
         if len = 2, then
            if str[i] = str[j]
               pal[i, j] := true
         else
            if str[i] = str[j] and pal[i+1, j-1] ≠ 0
               pal[i, j] := true

         if pal[i, j] is true, then
            cut[i, j] := 0
         else

            cut[i, j] := ∞
            for k in range i to j-1, do
               cut[i, j] := minimum of cut[i, j] and (cut[i, k]+ cut[k+1, j+1]+1)
            done
      done
   done
   return cut[0, n-1]
End

উদাহরণ

#include <iostream>
using namespace std;

int min (int a, int b) {
   return (a < b)? a : b;
}

int minPalPartion(string str) {
   int n = str.size();

   int cut[n][n];
   bool pal[n][n];              //true when palindrome present for i to jth  element

   for (int i=0; i<n; i++) {
      pal[i][i] = true;         //substring of length 1 is plaindrome
      cut[i][i] = 0;
   }

   for (int len=2; len<=n; len++) {
      for (int i=0; i<n-len+1; i++) {        //find all substrings of length len

         int j = i+len-1;              // Set ending index
         if (len == 2)                 //for two character string
            pal[i][j] = (str[i] == str[j]);
         else                  //for string of more than two characters
            pal[i][j] = (str[i] == str[j]) && pal[i+1][j-1];

         if (pal[i][j] == true)
            cut[i][j] = 0;
         else {
            cut[i][j] = INT_MAX;          //initially set as infinity
            for (int k=i; k<=j-1; k++)
               cut[i][j] = min(cut[i][j], cut[i][k] + cut[k+1][j]+1);
         }
      }
   }
   return cut[0][n-1];
}

int main() {
   string str= "ababbbabbababa";
   cout << "Min cuts for Palindrome Partitioning is:" << minPalPartion(str);
}

আউটপুট

Min cuts for Palindrome Partitioning is: 3

  1. রড কাটিং

  2. মাইএসকিউএল-এ int(5) বনাম int(10)?

  3. একটি অ্যারে প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য সি প্রোগ্রাম

  4. C# এ এনাম