我有一组N
个实体
有没有办法让我让所有子组满足每个子组中的实体数等于M
(N>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}
,...
似乎它必须是强力算法。
谢谢&问候
答案 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]);