c++求集合幂集 源代码及算法优化

来源:互联网 发布:气候变化 知乎 编辑:程序博客网 时间:2024/05/19 07:07

//求集合幂集的算法:这是目前最高效的算法By迷若烟雨
#include<iostream.h>
#include<windows.h>
#include<fstream.h>
int qiumiji(char *a,int len)//找所有子集的函数,集合放在数组a中,长度为len,直接移位操作,这是目前最高效的算法
{
int i=0,j=0;
bool flag=false;
cout<<"{NULL}"<<endl;
for(i=1;!flag;i++)
{
cout<<"{";
flag=true;
for(j=0;j<len;j++)
{
if((i>>j)&1)
cout<<a[j]<<" ";
else
flag=false;
}
cout<<"/b}"<<endl;
}
return i;
}
int main()
{
int num;//num代表集合长度
int count=0;
cout<<"Please input the number of aggerate:"<<endl;
cin>>num;
char *item=new char[num];
for(int i=0;i<num;i++)
{
cout<<"Please input the "<<i+1<<"th element:";
cin>>item[i];
}
int t0=GetTickCount();
count=qiumiji(item,num);
int t1=GetTickCount();
cout<<"总数:"<<count<<endl;
cout<<"求长度为"<<num<<"的集合的幂集所花费的时间为:"<<t1- t0<<"ms."<<endl;
delete [] item;
return 0;
}
 
 
时间复杂度为O(2^n*n),求10个元素的时间在265ms左右,比上一个算法效率提高了不少。