アクセスのために時間複雑度O(log(N))を持つred-blackツリーとして実装されたstd :: mapを使用します(このサイトによれば:http://bigocheatsheet.com/)。これらのコンテナを積み重ねると、大きなOをどのように計算するのですか?スタッキングコンテナのBig O
たとえば、map<int, map<int, int>>
です。一番内側の地図にアクセスするための大きなOは何ですか?
アクセスのために時間複雑度O(log(N))を持つred-blackツリーとして実装されたstd :: mapを使用します(このサイトによれば:http://bigocheatsheet.com/)。これらのコンテナを積み重ねると、大きなOをどのように計算するのですか?スタッキングコンテナのBig O
たとえば、map<int, map<int, int>>
です。一番内側の地図にアクセスするための大きなOは何ですか?
あなただけだから、O(LOGN) + O(LOGN) = O(klogn) = O(LOGN)です
map<int, map<int, int>> data;
const auto& lookup = data[5]; // here you spend O(logn)
int value lookup2 = lookup[3]; // here you spend O(logn)
、この場合には複雑さを合計する必要があります。
ネストされたレベルの量はN
には依存しませんが、彼らは常に一定であるので、これはO(LOGN)ようにmap<int, map<int, map<int, map<int, ..
とした場合のもだろう。
それでもO(Log(N))
あなたが出てマップ内の第2のマップにアクセスする意味と仮定すると、それが背中合わせに基本的に2つのO(ログ(N))の操作です。したがって、O(2*log(N))
は減少し、再びO(log(N))
になります。
O(log(N))と同じです。
これは、「内部」マップを取得するためにO(log(N))を持っているため、この要素に対してO(log(N))を再度必要とするため、 N))であり、O(log(N))と同じである。
同じもの。 map<int, map<int, int>> m
を持っていて、m[4][2]
を検索したい場合、これは2つの独立したマップ検索です。したがって、それらを追加するだけです。O(log M + log N) = O(log MN)
M
は外側のマップのサイズで、N
は内側のマップのサイズです。
外側と内側のマップサイズは独立していることに注意してください。
*これらのコンテナをスタックする*とは? –
同じです。 'map>'は、キーにアクセスする限り、 'map 'と同じです。 –
NathanOliver
あなたの質問はより正確に定式化する必要があります。何にアクセスする必要がありますか?既存の係数にはどのような仮定がありますか?たとえば、すべてのマップが同じサイズですか?マップは '[0,1、.. N]'にキーを持っていますか? 'N 'はサイズですか? –