algorithm - 如何确定笛卡尔积中单个单元格的值

标签 algorithm cartesian-product

假设我有一些大小可变的数组,例如[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/

相关文章:

javascript - 无法理解二叉树 DFS 的递归部分

algorithm - 这种比较/排名算法是如何命名的?

scala - Scala 中的叉积

algorithm - 如何计算这段代码的时间复杂度?

algorithm - Cube on Cube 碰撞检测算法?

python - 如何在阅读元素时保持列表排序

matlab - 将参数(即笛卡尔积)排列成多维数组

haskell - Haskell 中的笛卡尔列表乘积(内存和速度)

python - 根据序列位置在列表之间创建组合

matlab - 如何在 MATLAB 中找到所有排列(重复)?