计算组合的算法

原创 2012年03月30日 14:13:38

长度为nNum的整数数组pGroups,计算从pGroups中选取nSelNum个元素的组合,放到pRes中

不同组合个数TotalNum由函数CalCombNum(a,b)计算,pRes长度为TotalNum*nSelNum

void CalCombination(int *pGroups, int nNum, int nSelNum,int *pRes)
{
	nSelNum=(nSelNum>nNum) ? nNum:nSelNum;
	int* pTemp = new int[nSelNum+1];

	for(int i=0; i<=nSelNum; i++)
		pTemp[i] = i-1;//这里pTemp[0]=-1用来作为循环判断标识

	int k = nSelNum;
	bool flag = true;// 标志找到一个有效组合
	while(pTemp[0] == -1)
	{
		if(flag)//输出符合要求的组合
		{
			for(int i=1; i<=nSelNum; i++)
			{
				*pRes=pGroups[pTemp[i]];
				pRes++;
			}

			flag = false;
		}

		pTemp[k]++;//在当前位置选择新的数字
		if(pTemp[k] == nNum)// 当前位置已无数字可选,回溯
		{
			pTemp[k--] = 0;
			continue;
		}

		if(k < nSelNum)// 更新当前位置的下一位置的数字
		{
			pTemp[++k] = pTemp[k-1];
			continue;
		}

		if(k == nSelNum)
			flag = true;
	}

	delete[] pTemp;
}
计算阶乘
int CalFactorial(int nNum)
{
	if(nNum<=0) return 1;

	int nRes=1;
	for(int i=1;i<=nNum;i++)
		nRes*=i;

	return nRes;
}
计算从a个元素中选取b个元素的组合种类:
int CalCombNum(int a, int b)
{
	return CalFactorial(a)/(CalFactorial(b)*CalFactorial(a-b));
}


大数量级组合数的快速计算方法

转自:大数量级组合数的快速计算方法,保存在此以学习。 计算组合数最大的困难在于数据的溢出,对于大于150的整数n求阶乘很容易超出double类型的范围,那么当C(n,m)中的n=200时,直接用...
  • SHENNONGZHAIZHU
  • SHENNONGZHAIZHU
  • 2016年07月19日 16:19
  • 3377

c++计算组合数C(m,r)=m!/(r!*(m-r))

计算组合数C(m,r)=m!/(r!*(m-r)),其中m,r均为正整数,且m>r。
  • qikaihuting
  • qikaihuting
  • 2017年04月14日 11:23
  • 3403

关于acm中常见的计算组合数的方法总结

关于acm中常见的计算组合数的方法总结
  • u012476429
  • u012476429
  • 2014年02月27日 20:28
  • 4381

利用扩展欧几里得算法快速计算组合数取模

  • 2011年08月17日 12:44
  • 1KB
  • 下载

编程算法 - 计算一个数的所有组合数 代码(C++)

计算一个数的所有组合数 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 计算一个数的组合数, 使用递归进行求解....
  • zsc2014030403015
  • zsc2014030403015
  • 2015年01月19日 17:06
  • 431

STL中计算排列组合关系的算法

算法思想:首先,从最尾端开始往前寻找两个相邻的元素,令第一个元素为*i,第二个元素为*ii,且满足 *i < *ii 。找到这样一组相邻元素后,再从最尾端开始往前检验,找出第一个大于*i的元素,令为*...
  • u011954296
  • u011954296
  • 2016年03月26日 13:36
  • 504

概论-组合最优化问题、计算复杂性和启发式算法概念(现代优化计算方法)

1.组合最优化问题 定义: 是通过数学方法的研究去寻找离散事件的最优编排、分组、次序或筛选等。 描述: 最优化问题的数学模型的一般描述是 , x为决策变量,f ( x )为决...
  • ChinaJane163
  • ChinaJane163
  • 2015年10月12日 22:41
  • 2564

【算法复习四】计算复杂性与算法分析---组合数学知识汇总

一,组合数学问题         1)排列定义               • 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。             ...
  • tianshuai11
  • tianshuai11
  • 2012年05月06日 21:08
  • 1140

15个梨分给5个人的组合算法

  • 2016年03月16日 18:31
  • 3KB
  • 下载

组合算法JSP程序

  • 2013年07月10日 08:18
  • 34KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算组合的算法
举报原因:
原因补充:

(最多只允许输入30个字)