0

是否可以计算两个数组的笛卡尔积中的行位置?

例如,如果您有一个两行数组和另一个三行数组,则很容易计算笛卡尔积的大小(Array1.Rows.Count * Array2.Rows.Count = 6),但您不能遍历每个数组并且只需使用相应行位置的乘积来计算笛卡尔积中的行位置。

Array1.Row * Array2.Row
1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4
3 * 1 = 3
3 * 2 = 6

当您以下列方式遍历它们时,是否有一个公式可以从 Array1.Row 和 Array2.Row 获得结果 1、2、3、4、5、6:

For 1 To Array1.Rows.Count
    For 1 To Array2.Rows.Count
        'some formula here to obtain:'
        Cartesian.Row = Cartesian.Row + 1
    Next Array2.Row
Next Array1.Row

谢谢!

4

1 回答 1

3

我不确定我是否理解这个问题,但你只是要求一个简单的 2D 到 1D 索引转换吗?

如果是这样,公式是(对于基于 1 的索引)

FOR i1 = 1..N1 DO
  FOR i2 = 1..N2 DO
     (i1,i2) => ((i1-1) * N2) + i2)

下面是一个 Java 代码片段来演示:

public class Carte {
    public static void main(String[] args) {
        count(1, 2);
        count(2, 1);
        count(3, 2);
    }   
    public static void count(final int N1, final int N2) {
        System.out.println(N1 + "x" + N2);
        for (int i1 = 1; i1 <= N1; i1++) {
            for (int i2 = 1; i2 <= N2; i2++) {
                System.out.format("(%d,%d)=%d%n", i1, i2, ((i1-1) * N2 + i2));
            }
        }
    }
}

这打印:

1x2
(1,1)=1
(1,2)=2
2x1
(1,1)=1
(2,1)=2
3x2
(1,1)=1
(1,2)=2
(2,1)=3
(2,2)=4
(3,1)=5
(3,2)=6

也可以看看

于 2010-05-13T01:45:47.477 回答