2008-10-21 6 views
55

Je voudrais connaître la complexité de Big notation O du TSL multiset, la carte et les classes de carte de hachage lorsque:multiset, carte et carte de hachage complexité

  • entrées insertion
  • entrées accès
  • Extraction entries
  • entrées comparant
+2

c'est en fait mon message et je ne comprends pas pourquoi je semble inactif et ne peux donc pas le changer ... – Harry

Répondre

6

Vous pouvez trouver ces informations dans la documentation SGI STL: Fondamentalement, le multiset et les cartes sont des arbres binaires triés, donc insérer/trouver 1 sur N entrées prend O (log N). Voir Assoc. Triée. Conteneurs dans la documentation.

De toute évidence, le grand avantage de Hashmap est O (1) pour l'insertion et la recherche d'entrées.

L'accès après trouvé est O (1) pour toutes les structures. Comparaison, que voulez-vous dire par là? On dirait O (1) pour moi, après tout ont été trouvés.

76
carte

, ensemble, multimap et multiset

Ceux-ci sont mis en œuvre au moyen d'un red-black tree, un type de balanced binary search tree. Ils ont les asymptotiques temps d'exécution suivantes:

Insertion: O (log n)
Recherche: O (log n)
Suppression: O (log n)

hash_map, hash_set, hash_multimap et hash_multiset

Ils sont implémentés en utilisant hash tables. Ils ont les runtimes suivants:

d'insertion: O (1) prévu, O (n) pire des cas
Recherche: O (1) prévu, O (n) pire des cas
Suppression: O (1) prévu, O (n) pire cas

Si vous utilisez une fonction de hachage appropriée, vous ne verrez presque jamais le pire des cas, mais c'est quelque chose à garder à l'esprit - voir this paper pour un exemple.

+4

Est-ce que tout ce que vous dites sur 'hash_ *' se réfère aux conteneurs C++ 11 non ordonnés et Boost.Unordered? – myWallJSON

+3

@myWallJSON: yes – sehe

+1

Les modèles de classe 'hash_ *' font partie de [STL Silicon Graphics] (https://www.sgi.com/tech/stl/). Ils ont été incorporés dans la révision C++ 11 sous les noms 'unordered_ *' (unordered_map, unordered_set, etc.). Ils ont également été inclus dans les bibliothèques libstdC++, Visual C++ et Boost C++. – soliosg

10

cppreference.com est où je vais pour mes questions de référence C++. Ils font un très bon travail de décrivant la notation Big O pour la plupart des fonctions que vous avez posées ci-dessus.