速度暴快的组合生成算法
2007-10-05 17:41
330 查看
近日在维普数据库里看资料,偶然发现了一个介绍组合生成算法的文章,照着算法流程,自己写了一下,发现速度果然不错。
C++实现代码:
#include <cstdlib>
#include <iostream>
using namespace std;
void combination( int n, int m )...{
int *A=new int[n+1];
int *B=new int[m+1];
int i, j;
for( i=1; i<=n; ++i )
A[i]=i;
for( i=1; i<=m; ++i )
B[i]=m;
while( B[1]<n )...{
for( i=1; i<=m; ++i )
cout<<A[i]<<" ";
cout<<endl;
j=m;
while( B[j]==n )
--j;
++B[j];
for( i=j+1; i<=m; ++i )
B[i]=B[j];
swap( A[j], A[B[j]] );
}
delete []A;
delete []B;
}
int main(int argc, char *argv[])
...{
combination( 20, 4 );
system("PAUSE");
return EXIT_SUCCESS;
}
C++实现代码:
#include <cstdlib>
#include <iostream>
using namespace std;
void combination( int n, int m )...{
int *A=new int[n+1];
int *B=new int[m+1];
int i, j;
for( i=1; i<=n; ++i )
A[i]=i;
for( i=1; i<=m; ++i )
B[i]=m;
while( B[1]<n )...{
for( i=1; i<=m; ++i )
cout<<A[i]<<" ";
cout<<endl;
j=m;
while( B[j]==n )
--j;
++B[j];
for( i=j+1; i<=m; ++i )
B[i]=B[j];
swap( A[j], A[B[j]] );
}
delete []A;
delete []B;
}
int main(int argc, char *argv[])
...{
combination( 20, 4 );
system("PAUSE");
return EXIT_SUCCESS;
}
相关文章推荐
- 一个排列、组合的生成算法
- 基础算法测试——生成一个1-10之间的随机整数组合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 全排列生成算法与组合数排列求法
- 排列组合算法1:生成全部有序列
- 得出“15选5”的各种组合(组合生成算法)
- 基础算法测试——生成一个1-10之间的随机整数组合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 一个排列、组合的生成算法 [zz]
- 基于字典序的组合生成算法
- 子集和问题 —— 一种组合生成算法
- 组合数学——排列数生成算法详解(zz)
- 以反射Gray码的顺序生成0,1的n元组的算法-组合数学
- 根据N种规格中的M种规格值生成的全部规格组合的一种算法
- 基础算法测试——生成一个1-10之间的随机整数组合
- 生成组合序列算法
- 得出“15选5”的各种组合(组合生成算法)
- 排列组合数生成算法
- 【算法】组合数学——排列数生成算法详解(一)
- php生成数组的使用示例 php全组合算法