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

अलेक्जेंडर बोगोमोल्नी का अनियंत्रित क्रमचय एल्गोरिथ्म C++ . में


यहां, हमें एक नंबर N दिया गया है। हमारा काम अलेक्जेंडर बोगोमोल्नी के अनऑर्डर्ड परम्यूटेशन एल्गोरिथम का उपयोग करके N का क्रमपरिवर्तन खोजना है।

आइए पहले क्रमपरिवर्तन पर चर्चा करें,

एक क्रमपरिवर्तन एक सेट में एक आइटम को विशिष्ट रूप से ऑर्डर करने के तरीकों की संख्या को क्रमपरिवर्तन कहा जाता है।

उदाहरण - {4,9,2} का क्रमचय {4,9,2}, {4,2,9}, {9,4,2}, {9,2,4}, {2,4,9 होगा। } और {2,9,4}.

क्रमपरिवर्तन ने कंप्यूटर नेटवर्किंग, समानांतर प्रसंस्करण में स्विचिंग नेटवर्क को परिभाषित करने और विभिन्न क्रिप्टोग्राफ़िक एल्गोरिदम में भी उपयोग किया है।

अलेक्जेंडर बोगोमोल्नी का अनियंत्रित क्रमचय एल्गोरिथम

यह एल्गोरिदम पहले एन प्राकृतिक संख्याओं के सभी संभावित क्रमपरिवर्तन की गणना करता है। एक संख्या N को देखते हुए, क्रमपरिवर्तन की गणना 1 से N तक की जाती है।

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

इनपुट

N = 3

आउटपुट

1,2,3 ; 1,3,2 ; 2,1,3 ; 2,3,1 ; 3,1,2 ; 3,2,1

एल्गोरिदम

1. Build a function with an array, number N, and an integer k as
parameters
2. Initialize the level, as level increases permute the rest of the values
3. When the recursion condition is reached all its values are printed.

उदाहरण

हमारे एल्गोरिथ्म के कार्यान्वयन को दिखाने के लिए कार्यक्रम -

#include <iostream>
using namespace std;
int level = -1;
void AlexanderBogomolyn(int permutations[], int N, int k) {
   level = level + 1;
   permutations[k] = level;
   if (level == N) {
      for (int i = 0; i < N; i++)
         cout<<permutations[i]<<"\t";
      cout<<endl;
   }
   else{
      for (int i = 0; i < N; i++)
         if (permutations[i] == 0)
            AlexanderBogomolyn(permutations, N, i);
   }
   level = level - 1;
   permutations[k] = 0;
}
int main(){
   int N = 4;
   int permutations[N] = { 0 };
   cout<<"All permutations are :\n";
   AlexanderBogomolyn(permutations, N, 0);
   return 0;
}

आउटपुट

All permutations are :
1 2 3 4
1 2 4 3
1 3 2 4
1 4 2 3
1 3 4 2
1 4 3 2
2 1 3 4
2 1 4 3
3 1 2 4
4 1 2 3
3 1 4 2
4 1 3 2
2 3 1 4
2 4 1 3
3 2 1 4
4 2 1 3
3 4 1 2
4 3 1 2
2 3 4 1
2 4 3 1
3 2 4 1
4 2 3 1
3 4 2 1
4 3 2 1

  1. C/C++ में बर्कले का एल्गोरिथम

    बर्कले का एल्गोरिथ्म एक एल्गोरिथ्म है जिसका उपयोग वितरित प्रणालियों में घड़ी के सिंक्रनाइज़ेशन के लिए किया जाता है। इस एल्गोरिथम का उपयोग उन मामलों में किया जाता है जब वितरित नेटवर्क के कुछ या सभी सिस्टम में इनमें से कोई एक समस्या होती है - उ. मशीन के पास सटीक समय स्रोत नहीं है। B. नेटवर्क या

  1. सी ++ में बेलमैन फोर्ड एल्गोरिदम?

    बेलमैन फोर्ड एल्गोरिथम गतिशील प्रोग्रामिंग एल्गोरिथम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है, जिसे शुरुआती शीर्ष के रूप में माना जाता है। यह एल्गोरिथ्म पुनरावृत्त विधि का अनुसरण करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। भारित ग्राफ़ पर बेलमैन फोर्ड एल्

  1. सी ++ में लेक्सिकोग्राफिक रूप से अगला क्रमपरिवर्तन

    यहां हम देखेंगे कि सी ++ में एक स्ट्रिंग के लेक्सिकोग्राफिक रूप से अगले क्रमपरिवर्तन को कैसे उत्पन्न किया जाए। लेक्सिकोग्राफिक रूप से अगला क्रमपरिवर्तन मूल रूप से अधिक से अधिक क्रमपरिवर्तन है। उदाहरण के लिए, ACB का अगला BAC होगा। कुछ मामलों में, लेक्सिकोग्राफ़िक रूप से अगला क्रमपरिवर्तन मौजूद नहीं ह