Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में शब्दों की संक्षिप्त एन्कोडिंग

मान लीजिए कि हमारे पास शब्दों की एक सूची है, हम इसे एक संदर्भ स्ट्रिंग एस और इंडेक्स ए की सूची लिखकर एन्कोड कर सकते हैं। उदाहरण के लिए, आइए विचार करें कि शब्दों की सूची ["time", "me", "bell" है या नहीं। ], तो हम इसे S ="समय#घंटी#" और अनुक्रमणिका =[0, 2, 5] के रूप में लिख सकते हैं। यहां प्रत्येक इंडेक्स के लिए, हम उस इंडेक्स से संदर्भ स्ट्रिंग से पढ़कर शब्द को पुनर्प्राप्त करेंगे जब तक कि हम "#" प्रतीक तक नहीं पहुंच जाते।

तो हमें यह पता लगाना होगा कि दिए गए शब्दों को एन्कोड करने वाली सबसे छोटी संदर्भ स्ट्रिंग एस की लंबाई क्या है? तो दिए गए उदाहरण के लिए, आउटपुट 10 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • insertNode विधि को परिभाषित करें, यह सिर और स्ट्रिंग s लेगा
  • कर्र:=सिर, झंडा:=झूठा।
  • i के लिए s – 1 के नीचे के आकार के आकार में 0
    • x :=s[i]
    • अगर curr का m[x] शून्य है, तो फ्लैट सेट करें:=true और curr के m[x] में एक नया नोड बनाएं।
    • कर्र:=एम[x] करी
  • झंडा सही होने पर s का आकार लौटाएं, अन्यथा 0
  • मुख्य विधि से, निम्न कार्य करें -
  • ret :=0, head :=new node
  • शब्दों को उनकी लंबाई के आधार पर क्रमबद्ध करें
  • n :=शब्दों का आकार
  • मैं के लिए 0 से n - 1 की सीमा में
    • अस्थायी:=insertNode(सिर, शब्द[i])
    • अगर टेम्परेचर नॉन 0 है, तो रिट :=रिट + टेम्प + 1
  • रिटर्न रिट।

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
struct Node{
   map <char, Node*> m;
};
class Solution {
   public:
   static bool cmp(string a, string b){
      return a.size() > b.size();
   }
   int insertNode(Node* head, string s){
      Node* curr = head;
      bool flag = false;
      for(int i = s.size() - 1; i >= 0; i--){
         char x = s[i];
         if(!curr->m[x]){
            flag = true;
            curr->m[x] = new Node();
         }
         curr = curr->m[x];
      }
      return flag? (int)s.size() : 0;
   }
   int minimumLengthEncoding(vector<string>& words) {
      int ret = 0;
      Node* head = new Node();
      sort(words.begin(), words.end(), cmp);
      int n = words.size();
      for(int i = 0; i < n; i++){
         int temp= insertNode(head, words[i]);
         if(temp){
            ret += (temp + 1);
         }
      }
      return ret;
   }
};
main(){
   vector<string> v = {"time", "me", "bell"};
   Solution ob;
   cout << (ob.minimumLengthEncoding(v));
}

इनपुट

["time", "me", "bell"]

आउटपुट

10

  1. सी ++ में बाइनरी ट्री का संक्षिप्त एन्कोडिंग

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। जैसा कि हम जानते हैं कि बाइनरी ट्री का संक्षिप्त एन्कोडिंग न्यूनतम संभव स्थान के करीब प्रदर्शन करता है। nth कातालान संख्या n विभिन्न नोड्स के साथ संरचनात्मक रूप से भिन्न बाइनरी ट्री की संख्या द्वारा निर्दिष्ट है। यदि n बड़ा है, तो यह लगभग 4n है; इस प्रकार, ह

  1. फ़ाइल में अद्वितीय शब्दों को प्रिंट करने के लिए C++ प्रोग्राम

    एक फ़ाइल एक मेमोरी लोकेशन है जो वर्ड स्ट्रीम को स्टोर करती है। एक फाइल में विभिन्न शब्द होते हैं। इस कार्यक्रम में, हम फ़ाइल से सभी अद्वितीय शब्द खोजेंगे और उन्हें प्रिंट करेंगे। एक अद्वितीय शब्द का अर्थ है कि फ़ाइल में शब्द के आने की संख्या एक है। उदाहरण के लिए, Tutorials point is best for progra

  1. सी ++ में एक छोटा अक्षर कैसे लिखें?

    यहां हम देखेंगे कि C++ में शॉर्ट लिटरल कैसा होगा। सी या सी ++ में, विभिन्न प्रकार के डेटा में अलग-अलग अक्षर होते हैं। ये नीचे सूचीबद्ध हैं। Sr.No डेटाटाइप और लिटरल 1 int 5 2 अहस्ताक्षरित int 5यू 3 लंबी 5ली 4 लंबी लंबी 5एलएल 5 फ्लोट 5.0f 6 डबल 5.0 7 char \5 अब, इंट, ल