获取组的所有子组

时间:2014-02-14 08:00:16

标签: algorithm

我有一组N个实体 有没有办法让我让所有子组满足每个子组中的实体数等于MN>M)?

我将举例说明:

我有N = 5整数(例如:1,3,4,6,8) 有没有办法让所有包含L = 3个实体的子组? 这些小组是{1,3,4}{1,3,6}{1,3,8}{1,4,6}{1,4,8}{1,6,8}{3,4,6},...

似乎它必须是强力算法。

谢谢&问候

2 个答案:

答案 0 :(得分:1)

以下是递归解决方案的伪代码:

given_array[n]
current_combination[k]

void calculate( max_idx,  cur_idx, cur_count)
{
    if max_idx > cur_idx
        return
    if cur_count==k
        print current_combination
        return

    current_combination.add(given_array[cur_idx])
    calculate( max_idx, cur_idx+1, cur_count+1)
    current_combination.remove(given_array[cur_idx])


    calculate( max_idx, cur_idx+1, cur_count)

}

该函数的第一次调用应如下:

calculate( n, 0, 0)

答案 1 :(得分:0)

这是获取nCk的伪代码

getCombinations(set[],i,x,k,buff[]) {

   if(i<k) {

     for(j=x;j<set.size();j++) {

           buff[i] = set[j];
           getCombinations(set,i+1,j+1,k,buff);
     }

   }

   else {   // print combination

        for(y=0;y<k;y++) {

            printf(set[buff[y]]);
        }

   }
}

Call :- getCombinations(set,0,0,k,new int[k]);
相关问题