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

C++ में क्रमबद्ध क्रम में n-वें बाइनरी स्ट्रिंग खोजें

इस समस्या में, हमें 1 की धनात्मक संख्या दी जाती है। हमारा कार्य Nth बाइनरी स्ट्रिंग को क्रमबद्ध क्रम में खोजना है।

हमें Nth स्ट्रिंग को केवल दो प्रतीकों a और b का उपयोग करके बनाए गए स्ट्रिंग्स की एक अनंत सूची में खोजने की आवश्यकता है, जो लेक्सिकोग्राफ़िक क्रम में क्रमबद्ध हैं।

सूची है -

a, b, aa, ab, ba, bb, aaa, aab, aba, …

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input : N = 8
Output : aab

समाधान दृष्टिकोण

समस्या का एक सरल समाधान सभी n स्ट्रिंग्स को उत्पन्न करने के लिए लूप का उपयोग करना है। और फिर Nth स्ट्रिंग लौटाएं। यह समाधान काम तो करता है लेकिन एन के बड़े मूल्य के मामले में एक प्रभावी समाधान प्रदान नहीं कर सकता है।

तो, हम एक और समाधान देखेंगे जो कम समय में समाधान प्रदान कर सकता है।

समस्या को हल करने का एक अन्य तरीका स्ट्रिंग के लिए एक सापेक्ष सूचकांक का उपयोग करना है। इस तथ्य का उपयोग करते हुए कि लंबाई N के तारों की संख्या 2 प्रतीकों का उपयोग करके उत्पन्न की जा सकती है, 2N है। सापेक्ष सूचकांक का उपयोग बाइनरी फॉर्म . को खोजने के लिए किया जा सकता है स्ट्रिंग।

सापेक्ष सूचकांक =एन + 1 - 2(फर्श(लॉग(एन+1)))

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
string findBinString(ll n){
   ll len = (int)log2(n + 1);
   int ri = n + 1 - pow(2, len);
   ll i = 0;
   string binString = "";
   for (i = 0; i < len; i++) {
      binString += 'a';
   }
   i = 0;
   while (ri > 0) {
      if (ri % 2 == 1)
         binString[i] = 'b';
      ri /= 2;
      i++;
   }
   reverse(binString.begin(), binString.end());
   return binString;
}
int main(){
   ll n = 245;
   cout<<"The "<<n<<"-th binary string in sorted order is "<<findBinString(n);
   return 0;
}

आउटपुट

The 245-th binary string in sorted order is bbbabba

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu

  1. सी ++ में एक बाइनरी ट्री के प्रीऑर्डर ट्रैवर्सल में एन-वें नोड खोजें

    इस समस्या में, हमें एक बाइनरी ट्री और एक पूर्णांक N दिया जाता है। कार्य एक बाइनरी ट्री के प्रीऑर्डर ट्रैवर्सल में n-वें नोड को खोजना है। बाइनरी ट्री की एक विशेष शर्त होती है कि प्रत्येक नोड में अधिकतम दो बच्चे हो सकते हैं। ट्रैवर्सल एक पेड़ के सभी नोड्स पर जाने की एक प्रक्रिया है और उनके मूल्यों क

  1. C++ में बाइनरी ट्री के लंबवत क्रम ट्रैवर्सल में kth नोड खोजें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री और एक मान K है। कार्य Kth नोड को वर्टिकल ऑर्डर ट्रैवर्सल में प्रिंट करना है। यदि ऐसा कोई नोड मौजूद नहीं है, तो -1 लौटाएं। तो अगर पेड़ नीचे जैसा है - लंबवत क्रम ट्रैवर्सल इस प्रकार है - 4 2 1 5 6 3 8 7 9 तो अगर K =3 है, तो परिणाम 1 होगा। दृष्टिकोण सरल है। हम