Цикл Java над половиной массива - PullRequest
4 голосов
/ 05 августа 2011

Я хотел бы перебрать половину массива в Java;это потому, что матрица будет полностью симметричной.Если я зацикливаю столбцы i и j строк, каждый раз, когда я выполняю операцию матрицы [i] [j], я выполняю ту же самую операцию с матрицей [j] [i].Я должен быть в состоянии сэкономить время, не зацикливаясь на половине матрицы.Любые идеи о том, как сделать это проще всего?

Ответы [ 4 ]

7 голосов
/ 05 августа 2011

Если вы пытаетесь получить треугольник:

for(int i=0; i<array.length; i++){
  for(int j=0; j<=i; j++){
    ..do stuff...
  }
}
0 голосов
/ 05 августа 2011

Может быть, я чего-то здесь упускаю, но, скажем, у вас есть два массива, представляющих ваши строки и столбцы соответственно, и предполагается, что это симметрично (как вы говорите):

int dimension = rows.Length;
for(int i=0; i<dimension; i++)
{
  int j = (dimension-1) - i; //need dimension-1 to avoid an off-by-one error
  DoSomething(matrix[i][j]);
  DoSomehting(matrix[j][i]);
}

Это решение обладает преимуществом сложности среды выполнения, заключающимся в том, что итерация выполняется только в одном цикле, а не в двух.

0 голосов
/ 05 августа 2011
for(int i = 0; i<array.length; i++){
  for(int j = 0; j < array[i].length - i; j++){
     // operation here
  }
}
0 голосов
/ 05 августа 2011
for (i = 0;i < size; ++i) {
 for (j = 0; j < i; ++j) {
  result = do_operation(i,j);
  matrix[i][j] = result;
  matrix[j][i] = result ;
 }
}

Таким образом, вы вызываете метод операции do_operation только один раз для каждой пары.

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