1

Strassen Algorithm を実装するには、2 次行列を 4 つの 2 次部分行列に分割したいと考えています。

行列はすべて 1D 配列として表されます。

int i, j;
int dim = 4;
int new_dim = dim / 2;

int *A = malloc(sizeof(int) * dim * dim);
//FILL A
int *a11 = malloc(sizeof(int) * new_dim * new_dim);
int *a12 = malloc(sizeof(int) * new_dim * new_dim);
int *a21 = malloc(sizeof(int) * new_dim * new_dim);
int *a22 = malloc(sizeof(int) * new_dim * new_dim);
for (i = 0; i < new_dim; i++) {
    for (j = 0; j < new_dim; j++) {
        a11[i * new_dim + j] = A[XXXXX];
        a12[i * new_dim + j] = A[XXXXX];
        a21[i * new_dim + j] = A[XXXXX];
        a22[i * new_dim + j] = A[XXXXX];
    }
}

XXXXX に何を挿入すればよいか本当にわかりません。いくつかの組み合わせを試してみましたが、正しい値が得られません...

4

2 に答える 2

1

今それを得た...

for (i = 0; i < new_dim; i++) {
        for (j = 0; j < new_dim; j++) {
            a11[i * new_dim + j] = A[i*dim+j];
            a12[i * new_dim + j] = A[i*dim + (j+new_dim)];
            a21[i * new_dim + j] = A[(i+new_dim)*dim+j];
            a22[i * new_dim + j] = A[(i+new_dim)*dim+j+new_dim];
        }
    }
于 2013-10-25T20:41:07.110 に答える