从n个数中取出m个数字的所有情况,用什么算法解决,哪种效率比较高呢?
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/23 21:19:58
从n个数中取出m个数字的所有情况,用什么算法解决,哪种效率比较高呢?
比如说1,2,3中取出两个数字,有
1,2
1,3
2,3
这几种情况,这用程序怎么样实现呢,数字多了之后效率会比较低,那种效率会比较好呢
比如说1,2,3中取出两个数字,有
1,2
1,3
2,3
这几种情况,这用程序怎么样实现呢,数字多了之后效率会比较低,那种效率会比较好呢
从n中选m个数,以下两种方法:
(1)递归
a.首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止.
b.从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m.
下面是递归方法的实现:
/// 求从数组a[1..n]中任选m个元素的所有组合.
/// a[1..n]表示候选集,n为候选集大小,n>=m>0.
/// b[1..M]用来存储当前组合中的元素(这里存储的是元素下标),
/// 常量M表示满足条件的一个组合中元素的个数,M=m,这两个参数仅用来输出结果.
void combine( int a[],int n,int m,int b[],const int M )
{
for(int i=n; i>=m; i--) // 注意这里的循环范围
{
b[m-1] = i - 1;
if (m > 1)
combine(a,i-1,m-1,b,M);
else // m == 1,输出一个组合
{
for(int j=M-1; j>=0; j--)
cout
(1)递归
a.首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止.
b.从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m.
下面是递归方法的实现:
/// 求从数组a[1..n]中任选m个元素的所有组合.
/// a[1..n]表示候选集,n为候选集大小,n>=m>0.
/// b[1..M]用来存储当前组合中的元素(这里存储的是元素下标),
/// 常量M表示满足条件的一个组合中元素的个数,M=m,这两个参数仅用来输出结果.
void combine( int a[],int n,int m,int b[],const int M )
{
for(int i=n; i>=m; i--) // 注意这里的循环范围
{
b[m-1] = i - 1;
if (m > 1)
combine(a,i-1,m-1,b,M);
else // m == 1,输出一个组合
{
for(int j=M-1; j>=0; j--)
cout
从n个数中取出m个数字的所有情况,用什么算法解决,哪种效率比较高呢?
n个连续的自然数,任取m个,要求取出的m个数中没有相邻的数字,问共有几种取法?
一道c语言算法题写一个实现从n个数中找出含有数字3的个数
C语言程序:从N个数中随机取出100个不同的数
C语言递归做一个题目数的组合问题.从1,2,…,n中取出m个数,将所有组合按照字典顺序列出.如n=3,m=2时,输出:1
请问跟踪算法中,哪种效率最高呢?
若集合A中有m个元素,集合B中有n个元素,则从A到B的所有映射的个数为________,从B到A的所有映射的个数为___
几种排序算法的效率比较
怎么理解从n个不同元素中取出m个元素的组合数
是关于数进制的.给定6个数:1、3、9、27、81、243.从这6个数字中每一次取出n个数求和(每个数只能取一次),可以
N为正整数,计算从1到N的所有整数中包含数字1的个数.
求1 java算法 一个数组中m个数(连续的) 需要分成n组 求这n组的所有组合方式