2017-03-02 2 views
0

C++ 시간 상수로 2D 배열의 요소에 액세스하거나 수정하고 있습니까? 예를 들어2 차원 배열 액세스/수정 시간 상수입니까?

:

/* C++ */ 
int nRow, nColumn; 
int **data; 
... 
void set (int x, int y, int n) { 
    data[x][y] = n; 
} 
int get (int x, int y) { 
    return data[x][y]; 
} 

이 시간에 따라 nRow 및/또는 nColumn에인가?

+1

언어의 관점에서 보면 O (1)입니다. 캐시 효과가 적용될 수 있습니다. –

답변

1

에 따라 다릅니다.

작업이 아닙니다. data[x][y]*(data * max_y + y)이됩니다.

캐시 미스 등이 발생하면 차이가 날 수 있습니다. data이 크면 프리 페처와 캐시 공유를 무효화 할 수 있습니다. 두 가지 모두 상황에 따라 속도에 크게 영향을 줄 수있는 요소입니다.

+0

'data + (x * max_y + y) * sizeof (int)'는 실제로 무엇에 더 가깝습니다. '시간 복잡성 (time complexity)'에 관한 한 그 라인은 O (1) 즉 일정하지만 캐시 미스에 대한 요점은 매우 뛰어납니다. 이는 분리 된 시간 복잡성이 현실과 얼마나 다른지를 보여줍니다. –