假设我有一些大小可变的数组,例如[a, b, c]
和 [1, 2]
笛卡尔积为:
[
[a, 1],
[a, 2],
[b, 1],
[b, 2],
[c, 1],
[c, 2]
]
随着初始数组数量的增加,笛卡尔积的大小很快变得非常大。
对于任意数量的初始数组,是否可以计算出给定单元格 (i, j)
中的值,而无需生成整个真值表?
(在上面的真值表中 (0, 0) => a
, (0, 1) => 1
)
最佳答案
感谢@Sebastian和 @Damien回答评论中的问题。
以下是我在 Java 中实现该函数的方法:
public static class CartesianValueFactory {
private final Object[][] dimensions;
public CartesianValueFactory(Object[][] dimensions) {
this.dimensions = dimensions;
}
public Object valueAt(long row, int column) {
long index = row;
for (int nextColumn = column + 1; nextColumn < dimensions.length; nextColumn++) {
index = index / dimensions[nextColumn].length;
}
if (column == 0) {
return dimensions[column][(int) index];
} else {
return dimensions[column][(int) index % dimensions[column].length];
}
}
}
关于algorithm - 如何确定笛卡尔积中单个单元格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71264923/