当前位置: 首页 > 知识库问答 >
问题:

组合算法

廉博赡
2023-03-14
    public List<List<Fieldmatrix>> permute(List<Fieldmatrix> fields, int start, List<Fieldmatrix> prefix) {

    List<List<Fieldmatrix>> combinations = new ArrayList<>();

        if (start >= fields.size()) {
            combinations.add(prefix);
            return combinations;
        }
        String field = fields.get(start).getFieldName();
        if (fields.get(start).isMandatory() == false) {
            combinations.addAll(combine(fields, start + 1, prefix));
        }
        List<Fieldmatrix> prefixWithField = new ArrayList<>(prefix);
        prefixWithField.add(new Fieldmatrix (field, fields.get(start).isMandatory(), fields.get(start).getFieldtype(), new ArrayList<>()));
        combinations.addAll(combine(fields, start + 1, prefixWithField));

        return combinations;
    }
  • 字段1,为true
  • 字段2,真
  • 字段3,false
  • 字段4,false
  • 字段5,false

结果是:

  • {Field1,Field2,Field3,Field4,Field5}
  • {Field1,Field2,,Field4,Field5}
  • {Field1,Field2,,,Field5}
  • {Field1,Field2,,,}
  • {Field1,Field2,Field3,,Field5}
  • {Field1,Field2,Field3,,}
  • {Field1,Field2,Field3,Field4,}
  • {Field1,Field2,,Field4,}
public class Fieldmatrix {

private String fieldName;
private boolean mandatory;
private Type fieldtype;
private List<Fieldmatrix> list = new ArrayList<>();

public Fieldmatrix(String fieldName, boolean mandatory, Type fieldtype, List<Fieldmatrix> list){
    this.fieldName = fieldName;
    this.mandatory = mandatory;
    this.fieldtype = fieldtype;
    this.list = list;
}
//Getters and Setters
    null

共有1个答案

姜天宇
2023-03-14

假设顺序不重要,您可以使用一种方法来生成可选参数(即在您的情况下为假参数)的所有组合,如下所示:

假设您有3个可选参数和2个强制参数。所以您将有3^2=9个组合。

现在,您所要做的就是迭代9次,生成所有可能的组合。

for(i=0;i<9;i++){
  for(j=0;j<options.length;j++){
    if(j'th bit is set in 'i')
      print(options[j]);
  }
}
 类似资料:
  • 假设我有一个项目列表,每个项目都由一个简单的结构定义 毛皮类的选择:长的,短的,卷曲的 如果列表中包含了这3个类别的所有排列,那么最终结果将是 第一组: 动物      [猫狗鼠马] 眼睛颜色[蓝黄绿红橙] 皮毛          [长短卷曲] null 让我们将此列表称为输入(A) 将这些项目分组后,我们可以得到:(可能有其他可能性)。分组标准将是拥有尽可能少的输出组。 第一组: 动物     

  • 问题内容: 我正在尝试编写一段代码来执行以下操作: 取数字0到9,并给该数字分配一个或多个字母。例如: 当我有0123这样的代码时,对它进行编码很容易。显然,它将组成代码NLTD。当引入数字5,6或8时,情况会有所不同。051之类的数字可能会导致多种可能性: NVL和NFL 显而易见,较长的数字甚至包括5、6或8这样的数字,甚至会变得“更糟”。 由于对数学非常不好,我还无法提出一个像样的解决方案,

  • 问题是关于从16:43到23:34的视频中的合并排序http://youtu.be/M814OagXWTI?t=16m43s 在退出左/右排序合并递归后,我不清楚我们是如何合并回这些子数组的。让我们从最底部开始,当我们的元素被分成两个子数组时,一个左子数组称为B,一个右子数组称为C。在16:43左右,我们跳转到合并函数,对数组B和C进行排序,这两个数组只有8和3。合并排序函数(下面的代码)基本上通

  • map() 以链式调用的方式来简化 match 语句。然而,在返回类型是 Option<T> 的函数中使用 map() 会导致出现嵌套形式 Option<Option<T>>。多层链式调用也会变得混乱。所以有必要引入 and_them(),就像某些熟知语言中的 flatmap。 and_then() 使用包裹的值(wrapped value)调用其函数输入并返回结果。 如果 Option 是 No

  • match 是处理 Option 的一个有效方法。但是你最终会发现很多用例都相当繁琐,特别是操作只有一个有效输入的情况。在这些情况下,可以使用 组合算子(combinator)以模块化方式来管理控制流。 Option 有一个内置方法 map(),这个组合算子可用于简单映射Some -> Some 和 None -> None 的情况。多个不同的 map() 调用可以更灵活地链式连接在一起。 在下面

  • 问题内容: 我有ID为的商品。现在我有如下数据。每行都有一个offerId。由数组中的组合组成。是那个的价值 现在,我必须选择所有给我提供最佳ID组合(即最大总折扣)的offerId。 例如,在上述情况下:可能的结果可能是: [o2,o4,o5]最大折扣为。 注意。结果offerId应该不会重复ID。id的示例为[1,3,4],[5],[6]都是不同的。 其他组合可以是: 其id为[1],[3,5