Je voudrais connaître la complexité de la notation Big O des classes STL multiset, map et hash map lorsque:
Ceux-ci sont implémentés en utilisant un arbre rouge-noir , un type de arbre de recherche binaire équilibré . Ils ont les temps d'exécution asymptotiques suivants:
Insertion: O (log n)
Recherche: O (log n)
Suppression: O (log n)
Ceux-ci sont implémentés en utilisant tables de hachage . Ils ont les durées d'exécution suivantes:
Insertion: O(1) attendu, O(n) pire cas)
Recherche: O(1) attendu, O(n) pire cas)
Suppression: O(1) attendu, 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 Denial of Service via Algorithmic Complexity Attacks par Crosby et Wallach pour un exemple de ça.
Vous pouvez trouver ces informations dans la documentation SGI STL: http://www.sgi.com/tech/stl/
Fondamentalement, les multisets et les cartes sont des arbres binaires triés, donc l'insertion/la recherche de 1 entrée sur N prend O (log N). Voir Association triée. Conteneurs dans la documentation.
De toute évidence, le gros avantage de Hashmap est O(1) pour l'insertion et la recherche d'entrées.
Y accéder après avoir trouvé est O(1) pour toutes les structures. Comparaison, que voulez-vous dire par là? Cela ressemble à O(1) pour moi, après tous ont été trouvés.