组合算法

时间:2017-05-08 04:43:39

标签: java xml algorithm combinations permutation

这是纲领:

    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;
    }

我的想法是:例如,我有一个包含这些字段的XML

  • Field1,true
  • Field2,true
  • Field3,false
  • Field4,false
  • Field5,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,}

字段的值为true或false。可以删除虚假字段。因此,程序会找到这些字段的所有可能组合。

Fieldmatrix:

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

此程序仅适用于“1维”列表,这意味着如果任何字段在其自己的列表中没有字段。

我想更新此代码。 现在我有这样的结构:

  • Field 1,true
  • Field 2,true
  • Field 3,false
    • Subfield 1,true
    • Subfield 2,是的
      • Subsubfield 1,false

子字段1和子字段2位于字段3的列表中。子字段1位于子字段2中。

我应该如何更改代码,以便更多维度示例?

有人有想法吗?

0 个答案:

没有答案