매트릭스의 인덱스를 1차원 배열(C++)에 매핑하려면 어떻게 해야 합니까?
8x8 매트릭스가 있는데, 다음과 같습니다.
char matrix[8][8];
또, 다음과 같은 64개의 요소가 배열되어 있습니다.
char array[64];
그리고 매트릭스를 표로 그리고 셀을 숫자로 채웁니다. 각 숫자는 왼쪽에서 오른쪽으로, 위에서 아래로 증가합니다.
예를 들어 인덱스 3(컬럼)과 4(행)를 매트릭스에 포함시키면 내가 그린 표에서 볼 수 있듯이 어레이의 위치 35에 있는 요소에 해당한다는 것을 알 수 있습니다.매트릭스의 2개의 인덱스를 배열의 단일 인덱스로 변환하는 공식이 있다고 생각합니다만, 그것이 무엇인지 알 수 없습니다.
좋은 생각 있어요?
대부분의 언어가 다차원 배열을 저장하는 방법은 다음과 같습니다.
한다면matrix
에는 크기가 n(행) x m(행)이며, 여기서는 "행-주요 순서"를 사용하고 있습니다(행에서 먼저 카운트합니다.
matrix[ i ][ j ] = array[ i*m + j ]
.
여기서 i는 0에서 (n-1)로, j는 0에서 (m-1)로 갑니다.
즉, 기본 'm'의 숫자 체계와 같습니다.마지막 치수(여기서는 행 수)의 크기는 중요하지 않습니다.
개념적으로 이해하기 위해 행 번호로 'i'를 사용하고 열 번호로 'j'를 사용하는 (3x5) 행렬을 생각해 보십시오.번호를 매기기 시작하면i,j = (0,0) --> 0
. '줄 세우기' 순서(이렇게)의 경우 레이아웃은 다음과 같습니다.
|-------- 5 ---------|
Row ______________________ _ _
0 |0 1 2 3 4 | |
1 |5 6 7 8 9 | 3
2 |10 11 12 13 14| _|_
|______________________|
Column 0 1 2 3 4
행을 따라 이동하면(즉, 열 수를 늘리면) 카운트가 시작되므로 배열 인덱스는0,1,2...
두 번째 줄에 도착했을 때 이미 두 번째 줄에는5
엔트리는 인덱스로 시작합니다.1*5 + 0,1,2...
세 번째 줄에는 다음과 같은 항목이 있습니다.2*5
엔트리가 이미 있기 때문에 인덱스는2*5 + 0,1,2...
.
고차원의 경우, 이 아이디어는 일반화되어 있습니다. 즉, 3D의 경우matrix
L x N x M:
matrix[ i ][ j ][ k ] = array[ i*(N*M) + j*M + k ]
기타 등등.
자세한 설명은 http://www.cplusplus.com/doc/tutorial/arrays/;을 참조해 주세요.또한 기술적인 측면은 http://en.wikipedia.org/wiki/Row-major_order을 참조해 주세요.
줄서기 주문의 경우, 나는 그 문구가matrix[ i ][ j ] = array[ i*n + j ]
틀렸습니다.
오프셋은 다음과 같아야 합니다.offset = (row * NUMCOLS) + column
.
당신의 진술은 다음과 같습니다.row * NUMROWS + column
그건 잘못된 거야
제공된 링크는 올바른 설명을 제공합니다.
이런 거?
//columns = amount of columns, x = column, y = row
var calculateIndex = function(columns, x, y){
return y * columns + x;
};
다음 예제에서는 인덱스를 다시 x 및 y 좌표로 변환합니다.
//i = index, x = amount of columns, y = amount of rows
var calculateCoordinates = function(index, columns, rows){
//for each row
for(var i=0; i<rows; i++){
//check if the index parameter is in the row
if(index < (columns * i) + columns && index >= columns * i){
//return x, y
return [index - columns * i, i];
}
}
return null;
};
언급URL : https://stackoverflow.com/questions/14015556/how-to-map-the-indexes-of-a-matrix-to-a-1-dimensional-array-c
'programing' 카테고리의 다른 글
앱 실행 중 Vue.js 라우터에 경로 추가 (0) | 2022.08.07 |
---|---|
Vue.js에서 TypeScript를 사용하여 계산 소품을 사용하는 방법 (0) | 2022.08.07 |
정수 나눗셈의 동작은 무엇입니까? (0) | 2022.08.07 |
Nuxt server Middleware가 API에서 json을 가져옵니다. (0) | 2022.08.07 |
Java의 XML 해석에 가장 적합한 라이브러리는 무엇입니까? (0) | 2022.08.07 |