Java 键值关系的最小组合

Java 键值关系的最小组合,java,Java,我得到了这样一个二维数组 x = new ArrayList<String>(); y = new ArrayList<String>(); [put data in x/y] // generate field this.grid = new boolean[x.size()][y.size()]; for (String xId: x) { for (String yId: y) { this.grid[x.indexOf(xId)][y.

我得到了这样一个二维数组

x = new ArrayList<String>();
y = new ArrayList<String>();

[put data in x/y]

// generate field
this.grid = new boolean[x.size()][y.size()];
for (String xId: x) {
    for (String yId: y) {
        this.grid[x.indexOf(xId)][y.indexOf(yId)] = false;
    }
}

// parse to field
for (Map.Entry<String, ArrayList<String>> element : this.relations.entrySet()) {
    int xId = x.indexOf(element.getKey());
    for (String selector: element.getValue()) {
        int yId = y.indexOf(selector);
        this.grid[xId][yId] = true;
    }
}
结果基本上给出了以下信息:

x1 => [y4, y6, y7]
x2 => [y1, y3, y8]
x3 => [y1, y3, y9]
x4 => [y3]
...
分别是:

y1 => [x2, x3, x6, x9]
y2 => [x5,x9]
...
因此,有了这个输入:

x1 => [y4, y6, y7]
x2 => [y1, y3, y8]
x3 => [y1, y3, y9]
结果应该如下所示:

[x1]     => [y4, y6, y7]
[x2, x3] => [y1, y3]
[x2]     => [y8]
[x3]     => [y9]
我称之为最小组合

有什么想法吗?思想?暗示^^


在浏览了数小时的网页后,我认为问题领域被称为正式概念分析

您是否正在寻找一种算法来将输入转化为输出?你试过什么吗?是的。。我在猜测做这件事的最佳方法。。我想我必须将每行的匹配项分组,并将它们与其他行的匹配项进行比较。。我得到了超过500^400个组合。。我不知道是否有一个算法可以100%解决这个问题。。也许只有一种方法可以用N次迭代或类似的方法来近似结果。。这就是我提出这个问题的原因。我不知道有什么算法可以解决这个问题,但如果是我,我会将我比较的两行添加到一个集合中,然后使用.retainal删除对这两行都不常见的内容。您必须针对所有行对所有行执行此操作,并且它似乎会随着您添加的每一行/列呈指数增长。
[x1]     => [y4, y6, y7]
[x2, x3] => [y1, y3]
[x2]     => [y8]
[x3]     => [y9]