ধরুন আমাদের একটি বাইনারি সংখ্যা আছে, সেটি হল একটি সংখ্যা n এর প্রতিনিধিত্ব। আমাদেরকে এমন একটি সংখ্যার বাইনারি উপস্থাপনা খুঁজে বের করতে হবে যেটি সবচেয়ে ছোট কিন্তু n এর থেকে বড়, এবং এটিতে 0 এবং 1 সেকে একই সংখ্যা রয়েছে। সুতরাং সংখ্যাটি যদি 1011 (11 দশমিকে) হয়, তাহলে আউটপুট হবে 1101 (13)। এই সমস্যাটি পরবর্তী-পরিবর্তন গণনা ব্যবহার করে পাওয়া যেতে পারে। আসুন ধারণা পেতে অ্যালগরিদম দেখি।
অ্যালগরিদম
nextBin(bin) -
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