web-dev-qa-db-ja.com

マルチセット、マップ、およびハッシュマップの複雑さ

STLマルチセット、マップ、およびハッシュマップクラスのBig O表記の複雑さを知りたいのは、次の場合です。

  • エントリを挿入する
  • エントリーへのアクセス
  • エントリを取得する
  • エントリの比較
67
Harry

マップ、セット、マルチマップ、およびマルチセット

これらは red-black treebalanced binary search tree のタイプを使用して実装されます。次の漸近的な実行時間があります。

挿入:O(log n)
ルックアップ:O(log n)
削除:O(log n)

hash_map、hash_set、hash_multimap、hash_multiset

これらは hash tables を使用して実装されます。次のランタイムがあります。

挿入:O(1)予想、O(n)最悪の場合
ルックアップ:O(1) expected、O(n)最悪の場合
削除:O(1) expected、O(n)最悪の場合

適切なハッシュ関数を使用する場合、最悪の場合の動作はほとんど見られませんが、覚えておく必要があります。例については、CrosbyおよびWallachによる アルゴリズムの複雑性攻撃によるサービス拒否 を参照してくださいその。

98
Adam Rosenfield

この情報は、SGI STLドキュメントで見つけることができます。 http://www.sgi.com/tech/stl/

基本的に、マルチセットとマップはどちらもバイナリツリーでソートされるため、Nエントリのうち1エントリを挿入/検索するにはO(log N)が必要です。ソート済み連想を参照してください。ドキュメント内のコンテナ。

明らかに、Hashmapの大きな利点は、エントリを挿入および検索するためのO(1)です。

見つかった後にアクセスするには、O(1)すべての構造に対して。比較、それはどういう意味ですか?O(1)すべてが見つかりました。

8
ypnos