Математический вопрос: можно ли вычислить положение строки при переборе декартова произведения двух массивов?

Можно ли вычислить позицию строки в декартовом произведении двух массивов?

Например, если у вас есть один массив из двух строк и другой из трех строк, легко вычислить размер декартова произведения (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

Есть ли формула для получения результата 1, 2, 3, 4, 5, 6 из Array1.Row и Array2.Row при их повторении следующим образом:

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

Спасибо!


person Kuyenda    schedule 13.05.2010    source источник
comment
@Evgeny: mathoverflow предназначен для математических вопросов исследовательского уровня, это не похоже на один.   -  person Anonym Mus    schedule 13.05.2010


Ответы (1)


Я не уверен, понимаю ли я вопрос, но вы просто просите простое преобразование индекса из 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

Смотрите также

person polygenelubricants    schedule 13.05.2010
comment
Вот и все! И спасибо, что показали мне подходящие термины для того, чтобы задать вопрос! - person Kuyenda; 13.05.2010