获取组的所有子组[重复]
Posted
技术标签:
【中文标题】获取组的所有子组[重复]【英文标题】:Get all subgroup of a group [duplicate] 【发布时间】:2014-03-13 11:37:10 【问题描述】:我有一组 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
、...
看来一定是蛮力算法。
感谢和问候
【问题讨论】:
【参考方案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)
【讨论】:
【参考方案2】:这里是获取 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]);
【讨论】:
buff[j];
是什么意思?
@EliaWeiss 抱歉输入错误,请检查我的编辑以上是关于获取组的所有子组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 panda apply() 函数将每个子组的所有值替换为子组最小值(无循环)