0

2つの配列のデカルト積の行位置を計算することは可能ですか?

たとえば、2行の配列と3行の配列がある場合、直積のサイズを計算するのは簡単です(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 に答える