এই সমস্যায় একটি স্ট্রিং দেওয়া আছে। স্ট্রিং-এর ক্যারেক্টারগুলোকে সেটের উপাদান বিবেচনা করে তার পাওয়ার সেট (সকল সাবসেট) লেক্সিকোগ্রাফিক ক্রমে প্রিন্ট করতে হবে।
পাওয়ার সেট
একটি সেটের পাওয়ার সেট হলো তার সকল সাবসেটের সেট। উদাহরণস্বরূপ, S = {1,2,3} হলে P(S) = {{}, {1}, {1,2}, {1,3}, {2}, {2,3}, {3}, {1,2,3}}।
উদাহরণ
ইনপুট: "xyz"
আউটপুট: x xy xyz xz y yz z
অ্যালগরিদম
- স্ট্রিংটি সর্ট করুন (লেক্সিকোগ্রাফিক ক্রমের জন্য)।
- রিকার্শন ব্যবহার করে প্রতিটি ক্যারেক্টার ফিক্স করে বাকি সাবস্ট্রিং জেনারেট করুন।
- প্রথম ক্যারেক্টার বাদ দিয়ে পরবর্তী পারমুটেশন পান।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
void printAllSubsets(string str, int n, int index = -1, string subset = "") {
if (index == n) return;
cout << subset << "\n";
for (int i = index + 1; i < n; i++) {
subset += str[i];
printAllSubsets(str, n, i, subset);
subset.erase(subset.size() - 1);
}
}
void GeneratePowerSet(string str) {
sort(str.begin(), str.end());
printAllSubsets(str, str.size());
}
int main() {
string str = "xyz";
cout << "স্ট্রিং '" << str << "' এর পাওয়ার সেট:\n";
GeneratePowerSet(str);
return 0;
}
আউটপুট
স্ট্রিং 'xyz' এর পাওয়ার সেট: x xy xyz xz y yz z