2017-03-02 1 views
0

2D配列の要素にC++時定数でアクセスまたは変更していますか?例えば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)'は実際のものにはるかに近いものです。 「時間の複雑さ」に関する限り、そのラインはO(1)すなわち一定であるが、キャッシュミスに関するポイントは大きい。それは、分離された時間の複雑さが現実からどのように現れているかを示すのに役立つ。 –

関連する問題