简单构造法
n=0:{}
n=1:{}、{a1}
n=2:{}、{a1}、{a2}、{a1,a2}
求P(n),先计算P(n-1),复制一份,在每个集合中加入an。
n=0:{}
n=1:{}、{a1}
n=2:{}、{a1}、{a2}、{a1,a2}
求P(n),先计算P(n-1),复制一份,在每个集合中加入an。
C++实现:
#include <set>
#include <vector>
using namespace std;
vector<set<int> > getSubsets(const set<int> &iset)
{
vector<set<int> > allsubsets;
allsubsets.push_back(set<int>());
for(set<int>::const_iterator i = iset.begin(); i != iset.end(); ++i)
{
int item = *i;
vector<set<int> > moresubsets;
for(vector<set<int> >::iterator iter = allsubsets.begin();
iter != allsubsets.end();
++iter)
{
set<int> newsubset(*iter);
newsubset.insert(item);
moresubsets.push_back(newsubset);
}
allsubsets.insert(allsubsets.end(), moresubsets.begin(), moresubsets.end());
}
return allsubsets;
}