采用增量穷举法求解1-n的幂集
【问题描述】对于给定的正整数n(n>=1),求1~n构成的集合的幂集(即由1~n的集合中所有子集构成的集合,包括全集和空集)
【问题求解】
程序源代码如下:
#include <iostream>
#include <vector>
using namespace std;
//采用增量穷举法求解1-n的幂集
vector<vector<int> >ps; //存放幂集
void PSet(int n) { //求1-n的幂集ps
vector<vector<int> >ps1; //子幂集
vector <vector<int> >::iterator it; //幂集迭代器
vector<int> s;
ps.push_back(s); //添加{}空集元素
for (int i = 1; i <= n;i++) { //循环添加1-n
ps1 = ps; //ps1存放上一步得到的幂集
for (it = ps1.begin(); it != ps1.end();++it) {
(*it).push_back(i); //在ps1的每个集合元素的末尾添加i
}
for (it = ps1.begin(); it != ps1.end();++it) {
ps.push_back(*it); //将ps1的每个集合元素添加到ps中
}
}
}
void dispps() {
vector <vector<int> >::iterator it; //幂集迭代器
vector<int>::iterator its;
for (it = ps.begin(); it != ps.end();++it) {
cout << "{";
for (its = (*it).begin(); its != (*it).end();++its) {
cout << *its;
}
cout << "}";
}
cout << endl;
}
int main() {
int n = 0;
cout << "请输入n" << endl;
cin >> n;
PSet(n);
cout << "1到" << n << "的幂集为:" << endl;
dispps();
system("pause");
return 0;
}
输出结果:
请输入n
3
1到3的幂集为:
{}{1}{2}{12}{3}{13}{23}{123}
请按任意键继续. . .
【算法分析】
对于给定的n,每一个集合元素都要处理,有个,所以上述算法的时间复杂度为O(
)。