Как пролистать матричные блоки? - PullRequest
0 голосов
/ 08 октября 2009

У меня есть некоторая матрица, которую я хочу циклически проходить по блокам, матрица может иметь много разных размеров, но я могу знать размер, есть ли способ для быстрой прокрутки блоков?

Т.е.: для быстрого вывода индексов блоков предположим, что матрица 4 * 4 должна иметь:

Блок1: (0,0), (0,1) (1,0) (1,1)
Блок 2: (0,2), (0,3) (1,2) (1,3)
Блок 3: (2,0), (2,1) (3,0) (3,1)
Блок 4: (2,2), (2,3) (3,2) (3,3)
Где индексы (строка, столбец).

Для блоков я имею в виду подматрицу размера sqrt (matrixSize) * sqrt (matrixSize), где matrix - это матрица matrixSize * matrixSize. Например, матрица 4 * 4 имеет 4 блока по 2 * 2, а матрица 9 * 9 имеет 9 блоков по 3 * 3 ...

Я работаю в C, но я думаю, что псевдокод также полезен, мне нужен только цикл для индексов.

1 Ответ

0 голосов
/ 09 октября 2009

Мне удалось это сделать, это закодировано в c ...
Переменная matrix_size содержит количество строк (или столбцов) матрицы.
Переменная 'block' содержит предварительно вычисленный размер одного блока матрицы, т. Е. Sqrt matrix_size.


for(int i = 0; i< matrix_size; i++)
{
  fprintf(stdout, "Block %u: ", i);
  for(int k= ((i/block)*block) ; k < (((i/block)*block) + block) ;k++)
  {
    for(int j = ((i%block)*block) ; j< (((i%block)*block) + block); j++)
    {
      fprintf(stdout,"(%u,%u)",k,j);
    }
  }
  fprintf(stdout, "\n");

}

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