Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Power Set ตามลำดับ Lexicographic ใน C ++


ในปัญหานี้ เราได้รับสตริง str. งานของเราคือพิมพ์ชุดกำลังขององค์ประกอบของสตริงนี้ตามลำดับศัพท์

ชุดจ่ายไฟ − เซตกำลังของเซตคือเซตของเซตย่อยทั้งหมดของเซต เขียนแทนด้วย P(S) โดยที่ s คือเซต

ตัวอย่าง

S = {1, 2, 3} ;
p(S) = {{}, {1}, {1, 2}, {1, 3}, {2}, {2, 3}, {3}, {1,2,3}}

ในปัญหานี้ เราจะถือว่าสตริงเป็นเซต ดังนั้นตัวละครจะเป็นองค์ประกอบของชุด

มาดูตัวอย่างทำความเข้าใจปัญหากัน

ป้อนข้อมูล − str =“xyz”

ผลผลิต − x xy xyz xz y yz z

เพื่อแก้ปัญหานี้ เราจะต้องเรียงลำดับอาร์เรย์ เพื่อให้สามารถเรียงลำดับศัพท์ได้ จากนั้นเราจะแก้ไของค์ประกอบหนึ่งของสตริงและเรียกองค์ประกอบที่เหลือซ้ำ ๆ ซึ่งจะสร้างสตริงย่อยทั้งหมด และทิ้งองค์ประกอบคงที่แรกเพื่อรับการเปลี่ยนแปลงครั้งถัดไป

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#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 = subset.erase(subset.size() - 1);
   }
   return;
}
void GeneratePowerSet(string str) {
   sort(str.begin(), str.end());
   printAllSubsets(str, str.size());
}
int main() {
   string str = "xyz";
   cout<<"Power Set of the string '"<<str<<"' is :\n";
   GeneratePowerSet(str);
   return 0;
}

ผลลัพธ์

Power Set of the string 'xyz' is:
x xy xyz xz y yz z