【问题标题】: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}、...

看来一定是蛮力算法。

感谢和问候

【问题讨论】:

    标签: algorithm


    【解决方案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 抱歉输入错误,请检查我的编辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2016-07-21
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多