询问一个输出全组合算法的时间复杂度

xxMix 2010-04-20 07:45:15
询问一个输出全组合算法的时间复杂度,最好能说明一下怎么得来的,谢谢~~



#include <iostream>
#include <conio.h>
using namespace std;

bool L3( unsigned int &end, unsigned int staticStart, unsigned int &staticEnd ){
//终止判断
if( staticEnd >= end ){
return false;
}
unsigned int i = 0;
unsigned int j = 0;
for( i=staticEnd+1; i<=end; i++ ){
//1.输出Static Head
for( j=staticStart; j<=staticEnd; j++ ){
cout << j;
}
//2.输出变化值
cout << i << endl;
}
staticEnd++;
return true;
}

bool L2( unsigned int &end, unsigned int n ){
if( n > end ){
return false;
}
cout << n << endl;
unsigned int i = 0;
unsigned int iend = end - i;
unsigned int staticEnd = n;
while( L3( end, n, staticEnd ) ){
;
}
return true;
}

bool L1( unsigned int &end ){
if( end<1 ){
return false;
}
unsigned int i = 0;
for( i=1; i<=end; i++ ){
L2( end, i );
}
return true;
}

int main( void ){
unsigned int i = 0;
for( i=1; i<=10 ;i++ ){
system( "CLS" );
cout << "【" << i << "】的全组合数:" << endl;
cout << "--------------" << endl;
L1( i );
cout << "--------------" << endl;
cout << "按任意键继续..." << endl;
_getch( );
}
cout << "END" << endl;
_getch( );
return 1;
}
...全文
299 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2010-04-21
  • 打赏
  • 举报
回复
5层?
超级大笨狼 2010-04-21
  • 打赏
  • 举报
回复
我看到了7层循环,你真需要用计数器实验下了。
超级大笨狼 2010-04-21
  • 打赏
  • 举报
回复
其实,可以很容易知道,你在最里边的循环加个计数器,最后看是不是1000 就是到是n ^3还是什么了。
acdbxzyw 2010-04-21
  • 打赏
  • 举报
回复
写得可够复杂的啊。。。
acdbxzyw 2010-04-21
  • 打赏
  • 举报
回复
看代码好像是三重循环O(n^3)...
donkey301 2010-04-21
  • 打赏
  • 举报
回复
应该有问题吧

for( i=staticEnd+1; i<=end; i++ ){
//1.输出Static Head
for( j=staticStart; j<=staticEnd; j++ ){
cout << j;
}
//2.输出变化值
cout << i << endl;
}

照这句话,每个组合总会输出staticEnd和staticEnd+1这两个连续量
那么1,3,5这个组合就没法输出了。
求n个数的全组合可以遍历0到n位二进制组成的数之间的所有整数,每个整数代表一个组合。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧