Математический вопрос: возможно ли рассчитать положение строки, когда вы перебираете декартово произведение двух массивов? - PullRequest
0 голосов
/ 13 мая 2010

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

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

Спасибо!

1 Ответ

3 голосов
/ 13 мая 2010

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

Смотри также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...