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

C++ प्रोग्राम: Alexander Bogomolny का अनऑर्डर्ड परम्यूटेशन एल्गोरिदम


यह C++ प्रोग्राम Alexander Bogomolny के अनऑर्डर्ड परम्यूटेशन एल्गोरिदम को लागू करता है जो 1 से N तक के प्राकृतिक संख्याओं के सभी परम्यूटेशन (क्रमचय) जनरेट करता है।

एल्गोरिदम

शुरुआत
  1. फंक्शन AlexanderBogomolny():
     आर्गुमेंट्स: Val[] = ऐरे, N = तत्वों की संख्या, K = लेवल
     बॉडी:
     - l = -1 इनिशियलाइज़ करें
     - l = l + 1
     - Val[k] = l
     - यदि l == N तो display(Val, N) कॉल करें
     - अन्यथा i = 0 से N-1 तक:
         यदि Val[i] == 0 तो AlexanderBogomolny(Val, N, i) कॉल करें
         l = l - 1
         Val[k] = 0
समाप्ति

उदाहरण कोड

#include <iostream>
#include <iomanip>
using namespace std;

void display(const int *arr, const int size) {
    if (arr != 0) {
        for (int i = 0; i < size; i++)
            cout << setw(4) << arr[i];
        cout << "\n";
    }
}

void AlexanderBogomolny(int *Val, int N, int k) {
    static int level = -1;
    level = level + 1;
    Val[k] = level;
    
    if (level == N)
        display(Val, N);
    else
        for (int i = 0; i < N; i++)
            if (Val[i] == 0)
                AlexanderBogomolny(Val, N, i);
    
    level = level - 1;
    Val[k] = 0;
}

int main() {
    int N;
    cout << "Enter N to permute first N natural numbers: ";
    cin >> N;
    
    int Val[N];
    long long factorial = 1;
    for (int i = 0; i < N; i++) {
        Val[i] = 0;
        factorial *= (i + 1);
    }
    
    cout << "\nNumber of permutations possible: " << factorial;
    cout << "\n\nPermutations using Alexander Bogomolny's Algorithm:\n";
    AlexanderBogomolny(Val, N, 0);
    return 0;
}

आउटपुट (N=3 के लिए संक्षिप्त)

Enter N to permute first N natural numbers: 3
Number of permutations possible: 6

Permutations using Alexander Bogomolny's Algorithm:
   1   2   3
   1   3   2
   2   1   3
   2   3   1
   3   1   2
   3   2   1

व्याख्या: यह एल्गोरिदम बैकट्रैकिंग का उपयोग करता है जहां level स्टेटिक वेरिएबल वर्तमान गहराई ट्रैक करता है। प्रत्येक रिकर्सिव कॉल एक पोजीशन भरती है। जब लेवल N तक पहुंचता है, तो एक पूर्ण परम्यूटेशन प्रिंट होता है। समय जटिलता O(N × N!) है।

नोट: N=5 के लिए 120 परम्यूटेशन होते हैं जो आउटपुट में बहुत बड़े होते हैं।

  1. - C++ में अलेक्जेंडर बोगोमोलनी का अनऑर्डर्ड क्रमपरिवर्तन एल्गोरिदम

    यहां, हमें एक संख्या N दी गई है। हमारा कार्य अलेक्जेंडर बोगोमोलनी के अनऑर्डर्ड क्रमपरिवर्तन एल्गोरिदम का उपयोग करके N का अनऑर्डर्ड क्रमपरिवर्तन ढूंढना है। आइए पहले क्रमपरिवर्तन पर चर्चा करते हैं, एक क्रमपरिवर्तन एक सेट में आइटम को विशिष्ट रूप से क्रमबद्ध करने के तरीकों की संख्या है जिसे क्रमपरिवर

  1. ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम

    पेज नंबर और पेज साइज़ दिए गए हैं; कार्य ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम का उपयोग करके मेमोरी ब्लॉक को पेज में आवंटित करते समय हिट्स और मिस की संख्या ढूंढना है। ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम क्या है? ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम एक पेज रिप्लेसमेंट एल्गोरिदम है। एक पेज रिप्लेसमेंट एल्गोरि

  1. C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन

    विग्नेरे सिफर अल्फाबेटिक टेक्स्ट को एन्क्रिप्ट करने की एक प्रकार की पॉलीअल्फाबेटिक सब्स्टीट्यूशन विधि है। विग्नेरे सिफर टेबल का उपयोग किया जाता है जिसमें A से Z तक के अल्फाबेट्स 26 पंक्तियों में लिखे होते हैं, इस विधि में एन्क्रिप्शन और डिक्रिप्शन के लिए। एन्क्रिप्शन Key: WELCOME Message: Thisis