मान लीजिए कि हमारे पास एक द्विआधारी संख्या है, जो एक संख्या n का प्रतिनिधित्व करती है। हमें एक संख्या का द्विआधारी निरूपण खोजना है जो सबसे छोटी है लेकिन n से बड़ी है, और इसमें भी 0s और 1s की समान संख्या है। तो अगर संख्या 1011 (दशमलव में 11) है, तो आउटपुट 1101 (13) होगा। अगली क्रमपरिवर्तन गणना का उपयोग करके यह समस्या पाई जा सकती है। आइए विचार प्राप्त करने के लिए एल्गोरिथम देखें।
एल्गोरिदम
नेक्स्टबिन (बिन) -
Begin len := length of the bin for i in range len-2, down to 1, do if bin[i] is 0 and bin[i+1] = 1, then exchange the bin[i] and bin[i+1] break end if done if i = 0, then there is no change, return otherwise j:= i + 2, k := len – 1 while j < k, do if bin[j] is 1 and bin[k] is 0, then exchange bin[j] and bin[k] increase j and k by 1 else if bin[i] is 0, then break else increase j by 1 end if done return bin End
उदाहरण
#include <iostream> using namespace std; string nextBinary(string bin) { int len = bin.size(); int i; for (int i=len-2; i>=1; i--) { if (bin[i] == '0' && bin[i+1] == '1') { char ch = bin[i]; bin[i] = bin[i+1]; bin[i+1] = ch; break; } } if (i == 0) "No greater number is present"; int j = i+2, k = len-1; while (j < k) { if (bin[j] == '1' && bin[k] == '0') { char ch = bin[j]; bin[j] = bin[k]; bin[k] = ch; j++; k--; } else if (bin[i] == '0') break; else j++; } return bin; } int main() { string bin = "1011"; cout << "Binary value of next greater number = " << nextBinary(bin); }
आउटपुट
Binary value of next greater number = 1101