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

সি++-এ ডিকশনারি শব্দের সংযোজন দিয়ে শব্দ গঠন


এই সমস্যায়, আমাদের একটি ডিকশনারি এবং একটি শব্দ দেওয়া আছে। আমাদের কাজ হল চেক করা যে দেওয়া শব্দটি কি দুটি ডিকশনারি শব্দের সংযোজনে তৈরি করা যায়।

দেওয়া শব্দ গঠন করতে শব্দের পুনরাবৃত্তি অনুমোদিত নয়।

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

ইনপুট

ডিকশনারি = {"hello", "tutorials", "program" , "problem", "coding", "point"} শব্দ = "tutorialspoint"

আউটপুট

হ্যাঁ

ব্যাখ্যা

tutorialspoint tutorials এবং point দিয়ে তৈরি করা হয়েছে।

এই সমস্যাটি সমাধান করতে, আমরা ডিকশনারির সব উপাদানকে একটি প্রিফিক্স ট্রি বা ট্রাই-এ সংরক্ষণ করব। এবং তারপর ট্রাই-এ শব্দের প্রিফিক্স খুঁজব, যদি পাওয়া যায় তবে এটিকে দুটি ভাগ করব এবং শব্দের অন্য অংশটি খুঁজব। যদি পাওয়া যায় তবে true রিটার্ন করব অন্যথায় false।

সমাধানের বাস্তবায়ন দেখানোর প্রোগ্রাম,

উদাহরণ

#include<bits/stdc++.h> using namespace std; #define char_int(c) ((int)c - (int)'a') #define SIZE (26) struct TrieNode{    TrieNode *children[26];    bool isLeaf; }; TrieNode *getNode(){    TrieNode * newNode = new TrieNode;    newNode->isLeaf = false;    for (int i =0 ; i< 26 ; i++)    newNode->children[i] = NULL;    return newNode; } void insert(TrieNode *root, string Key){    int n = Key.length();    TrieNode * pCrawl = root;    for (int i=0; i<n; i++){       int index = char_int(Key[i]);       if (pCrawl->children[index] == NULL)          pCrawl->children[index] = getNode();       pCrawl = pCrawl->children[index];    }    pCrawl->isLeaf = true; } int prefixSearch(struct TrieNode *root, string key){    int pos = -1, level;    struct TrieNode *pCrawl = root;    for (level = 0; level < key.length(); level++){       int index = char_int(key[level]);       if (pCrawl->isLeaf == true)          pos = level;       if (!pCrawl->children[index])          return pos;       pCrawl = pCrawl->children[index];    }    if (pCrawl != NULL && pCrawl->isLeaf)    return level; } bool isWordCreated(struct TrieNode* root, string word){    int len = prefixSearch(root, word);    if (len == -1)       return false;    string split_word(word, len, word.length()-(len));    int split_len = prefixSearch(root, split_word);    return (len + split_len == word.length()); } int main() {    vector<string> dictionary = {"tutorials", "program", "solving", "point"};    string word = "tutorialspoint";    TrieNode *root = getNode();    for (int i=0; i<dictionary.size(); i++)       insert(root, dictionary[i]);    cout<<"ডিকশনারি ব্যবহার করে শব্দ গঠন ";    isWordCreated(root, word)?cout<<"সম্ভব" : cout<<"সম্ভব নয়";    return 0; }

আউটপুট

ডিকশনারি ব্যবহার করে শব্দ গঠন সম্ভব

  1. C++ ব্যবহার করে N ফ্যাক্টোরিয়ালের যোগফলের শেষ দু ডিজিট বের করা

  2. লিংকড লিস্ট ব্যবহার করে C++-এ দুটি পলিনোমিয়াল যোগ করা

  3. C++ প্রোগ্রাম: ফাইল থেকে ইউনিক শব্দ প্রিন্ট করা

  4. C++ প্রোগ্রাম: দুটি কিউ ব্যবহার করে স্ট্যাক ইমপ্লিমেন্টেশন