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

सी ++ में पहले एन नंबरों के क्रमपरिवर्तन को क्रमबद्ध करने के लिए उपसर्ग रिवर्सल की न्यूनतम संख्या

विवरण

एन संख्याओं की एक सरणी को देखते हुए जिसमें पहले एन संख्याओं का क्रमपरिवर्तन होता है। एक ही ऑपरेशन में, किसी भी उपसर्ग को उलटा किया जा सकता है। कार्य ऐसे संचालन की न्यूनतम संख्या ज्ञात करना है जैसे कि सरणी में संख्या बढ़ते क्रम में क्रमबद्ध हो।

उदाहरण

यदि सरणी {1, 2, 4, 3} है तो किसी सरणी को बढ़ते क्रम में क्रमबद्ध करने के लिए न्यूनतम 3 चरणों की आवश्यकता होती है -

  • पूरे सरणी को उलट दें {3, 4, 2, 1}
  • पहले दो तत्वों को उलट दें {4, 3, 2, 1}
  • संपूर्ण सरणी उलट दें {1, 2, 3, 4}

एल्गोरिदम

  • दिए गए नंबरों को एक स्ट्रिंग में एन्कोड करें। सरणी को क्रमबद्ध करें और इसे एक स्ट्रिंग गंतव्य में एन्कोड करें।
  • फिर प्रारंभिक क्रमपरिवर्तन से BFS करें। हर बार, वर्तमान क्रमपरिवर्तन के उपसर्ग को उलट कर प्रेरित सभी क्रमपरिवर्तनों की जाँच करें।
  • यदि इसे नहीं देखा गया है, तो इसे उलटे गिनती के साथ कतार में डाल दें।
  • जब एन्कोडेड स्ट्रिंग का क्रमपरिवर्तन गंतव्य स्ट्रिंग के समान हो, तो यहां तक ​​पहुंचने के लिए आवश्यक रिवर्सल की संख्या लौटाएं
  • अर्थात, स्ट्रिंग्स के सभी क्रमपरिवर्तन किए जाते हैं और उनमें से न्यूनतम को उत्तर के रूप में वापस कर दिया जाता है।

उदाहरण

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int minimumPrefixReversals(int *a, int n) {
   string start = "";
   string destination = "", t, r;
   for (int i = 0; i < n; i++) {
      start += to_string(a[i]);
   }
   sort(a, a + n);
   for (int i = 0; i < n; i++) { destination += to_string(a[i]);
}
queue<pair<string, int> > qu;
pair<string, int> p;
qu.push(make_pair(start, 0));
   if (start == destination) {
      return 0;
   }
   while (!qu.empty()) {
      p = qu.front();
      t = p.first;
      qu.pop();
      for (int j = 2; j <= n; j++) {
         r = t;
         reverse(r.begin(), r.begin() + j);
         if (r == destination) {
            return p.second + 1;
         }
         qu.push(make_pair(r, p.second + 1));
      }
   }
}
int main() {
   int a[] = { 1, 2, 4, 3 };
   int n = sizeof(a) / sizeof(a[0]);
   cout << "Minimum reversal: " << minimumPrefixReversals(a, n) << endl;
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

Minimum reversal: 3

  1. सी++ में डुडेनी नंबर्स

    संख्या सिद्धांत में परिभाषित एक गणितीय संख्या (विकिपीडिया)। नंबर हेनरी डुडेनी . द्वारा खोजा गया था . इसका गणितीय सूत्र है - यहाँ, हमें एक पूर्णांक n दिया गया है। हमारा काम जांच करना है कि दिया गया नंबर n एक डुडनी नंबर है या नहीं। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: एन =17592 आ

  1. BogoSort या क्रमपरिवर्तन सॉर्ट के लिए C++ प्रोग्राम?

    Bogosort बस एक संग्रह को तब तक बेतरतीब ढंग से फेरबदल करता है जब तक कि इसे क्रमबद्ध नहीं किया जाता है। BogoSort एक अप्रभावी एल्गोरिथम आधारित क्रमचय और संयोजन है इसलिए इसे क्रमपरिवर्तन क्रम के रूप में जाना जाता है। BogoSort एक बहुत ही फ्लॉप सॉर्टिंग तकनीक है जिसे शॉटगन सॉर्ट, बेवकूफ सॉर्ट, मंकी सॉर्ट,

  1. BogoSort या क्रमपरिवर्तन क्रम के लिए C++ प्रोग्राम?

    यहां हम एक और सॉर्टिंग एल्गोरिदम देखेंगे जिसे बोगो सॉर्ट कहा जाता है। इस प्रकार को क्रमपरिवर्तन सॉर्ट, स्टुपिड सॉर्ट, स्लो सॉर्ट आदि के रूप में भी जाना जाता है। यह सॉर्टिंग एल्गोरिदम विशेष रूप से अप्रभावी सॉर्टिंग तकनीक है। यह जनरेट और टेस्ट प्रतिमान के अंतर्गत आता है। यह क्रमबद्ध होने तक बार-बार क्