C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

この問題を解決するには、辞書式順序を取得できるように配列を並べ替える必要があります。次に、文字列の1つの要素を修正し、残りの要素を再帰的に呼び出して、すべてのサブ文字列を生成します。そして、最初の固定要素を破棄して、次の順列を取得します。

ソリューションの実装を示すプログラム

#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

  1. すべての順列をC++で並べ替えられた(辞書式)順序で出力します

    この問題では、長さnの文字列が与えられ、文字列の文字のすべての順列をソートされた順序で出力する必要があります。 問題を理解するために例を見てみましょう: 入力: 「XYZ」 出力: XYZ、XZY、YXZ、YZX、ZXY、ZYX。 ここでは、すべての順列を辞書式順序(アルファベット順)で印刷する必要があります。 この問題を解決するには、最初に配列をアルファベット順に並べ替える必要があります。並べ替えられた配列は、順列の最初の要素です。次に、文字列の次に高い順序の順列を生成します。 以下のコードは、解決策をより明確にします: 例 #include<iostream> #i

  2. C++STLでのセットとマップ

    Setは抽象データ型であり、要素の値によって要素が識別されるため、各要素は一意である必要があります。要素の値は、セットに追加されると変更できませんが、その要素の変更された値を削除して追加することはできます。 マップは、マップされた方法で要素を格納する連想コンテナです。各要素には、キー値とマップされた値があります。 2つのマップされた値が同じキー値を持つことはできません。 したがって、上記から明らかなように、setには唯一のキーが含まれ、mapにはキーを持つ値が含まれ、どちらも一意でソートされた値を持つ必要があります。 順序付けされていない要素と並べ替えられていない要素には、unorder