正文

求从m个数据中任取n个数据的所有组合2006-06-15 16:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/boxer/15822.html

分享到:

// 求从m个数据中任取n个数据的所有组合
// [in]chars -- 存放m个数据
// [in]m -- 数据个数
// [in]n -- 需要从m个数中取的数据的个数
// [out]set -- 存放所有的组合
// [inout]row -- 组合个数
// [in]col -- 当前取到第几个数据
// 思路:每次从集合中按顺序选择1个,然后进入递归取下一个;下一个数据只能从当前数据的后面的数据中任取一个
// 为了降低实际复杂度,当后面的数据个数不够时就不再取(通过for循环控制)。由于后面的组合与前面
// 的组合存在一定的同构性,因此,在获得一个组合后,直接把该组合的前面若干数据复制作为下一个组合的数据
template <class T>
void GetCombination(T *data, long m, long n,  T *set[], long &row, long col)
{
 long  i, j;

 if(n == 0)
 {
  ++row;
  // 直接把该组合的前面col-1个数据复制作为下一个组合的数据
  for(j=0; j<col-1; ++j)
   set[row][j] = set[row-1][j];
  
  return;
 }

 for(i=0; i<=m-n; ++i)
 {
  set[row][col++] = data[i];
  GetPermutation(data+i+1, m-1-i, n-1, set, row, col);
  --col;
 }
}

阅读(4397) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册