您的位置:首页 > 编程语言 > C语言/C++

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

2010-10-23 20:47 183 查看
//求集合幂集的算法:这是目前最高效的算法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左右,比上一个算法效率提高了不少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: