Si un dictionnaire/mappage est implémenté en tant que HashMap
il a un complexité maximale de O(1)
En effet, dans le meilleur des cas, il suffit de calculer le code de hachage de l'élément clé pour le récupérer, s'il n'y a pas de collision de clés.
A carte de hachage peut avoir un complexité d'exécution dans le pire des cas de O(n)
si vous avez beaucoup de collisions de clés ou une très mauvaise fonction de hachage, car dans ce cas, elle se dégrade en un balayage linéaire de l'ensemble du tableau qui contient les données.
Aussi, O(1)
ne veut pas dire instantanément cela signifie qu'il a un constant montant. Ainsi, le choix de la bonne implémentation pour un dictionnaire peut aussi bien dépendre du nombre d'éléments de la collection, car avoir un coût constant très élevé pour la fonction sera bien pire s'il n'y a que quelques entrées.
C'est pourquoi les dictionnaires/maps sont mis en œuvre différemment selon les scénarios. Pour Java, il existe plusieurs implémentations différentes, le C++ utilise des arbres rouges/noirs, etc. Vous les choisissez en fonction du nombre de données et en fonction de leur efficacité en termes de temps d'exécution dans le meilleur/moyen/pire cas.
39 votes
La notation O consiste à mesurer
the growth
de complexité avec différentes entrées. Il ne s'agit pas de savoir combien d'opérations vous avez. Par exemple : avec 1 valeur, vous avezx
secondes, avecn
vous devezroughly
x*n
secondes => O (n).x
Il pourrait s'agir de plusieurs opérations combinées.33 votes
Les structures de données n'ont pas une complexité de notation O, les opérations sur ces structures en ont une.
3 votes
De quelle opération s'agit-il ?
0 votes
@PatrickHofman Il explique certains faits concernant les complexités O(1) sur le dictionnaire, peut-être que "connexe" est un meilleur mot.
1 votes
Le PO indique clairement que l'accès par clé est l'opération en question.
0 votes
Pour mémoire, il n'y a pas beaucoup d'instructions non plus. Les processeurs Intel ont des instructions matérielles pour faire
SHA
de sorte qu'une recherche dans un dictionnaire peut être effectuée en quelques instructions d'assemblage.0 votes
Je pense que cette question n'est pas un doublon, car elle se concentre sur la fonction ffonction hash qui n'est pas const time.
1 votes
"Beaucoup d'opérations" et O(1) sont parfaitement compatibles - O(1) ou temps constant signifie que, lorsque le nombre d'éléments approche l'infini, il existe une constante finie qui limite le temps d'exécution. Cette constante peut être arbitrairement grande - l'utilisation d'une fonction de hachage dont l'exécution est garantie en un an n'empêcherait pas le système d'être O(1).
0 votes
Considérez une consultation de hachage comme une opération unique.
0 votes
Duplicata possible de Les tables de hachage peuvent-elles vraiment être O(1) ?