Strassen의 알고리즘을 C++에서 행렬 곱셈을 구현하려고하는데 두 행렬을 각각 4 개의 부분으로 나누는 방법을 찾고 싶습니다. 여기에 내가 그렇게하고있는 현재의 방법입니다일정 시간에 행렬을 "나누기"
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
A11[i][j] = a[i][j];
A12[i][j] = a[i][j+n];
A21[i][j] = a[i+n][j];
A22[i][j] = a[i+n][j+n];
B11[i][j] = b[i][j];
B12[i][j] = b[i][j+n];
B21[i][j] = b[i+n][j];
B22[i][j] = b[i+n][j+n];
}
}
이 방법 (N^2) 분명히 O이고, 그리고이 각 재귀 호출됩니다로는 런타임에 N^2 * 로그 (N)을 추가 요구.
일정한 시간에이를 수행하는 방법은 값을 복사하는 대신 4 개의 하위 행렬에 대한 포인터를 만드는 것이지만 포인터를 만드는 방법을 찾는 데 어려움을 겪고 있습니다. 어떤 도움을 주시면 감사하겠습니다.
원본 매트릭스의 크기가 2 * n입니까? – Pavel