Les tables de hashage (généralement) d'effectuer des opérations de recherche (rechercher) délimité au sein de la complexité de l' O(n)<=T(n)<=O(1)
, avec une moyenne de cas de la complexité de l' O(1 + n/k)
; toutefois, arbres binaires, (BST), effectuer des opérations de recherche (lookup) délimité au sein de la complexité de l' O(n)<=T(n)<=O(log_2(n))
, avec une moyenne de cas de la complexité de l' O(log_2(n))
. La mise en œuvre pour chacun d'eux (et tous) structure de données doit être connu (par vous), pour comprendre les avantages, les inconvénients, le temps de la complexité des opérations, et la complexité du code.
Par exemple, le nombre d'entrées dans une table de hachage ont souvent un nombre fixe d'entrées (une partie de ce qui peut ne pas être rempli à tous) avec des listes de collisions. Les arbres, sur l'autre main, généralement deux pointeurs (références) par nœud, mais cela peut être plus si la mise en œuvre permet plus de deux nœuds enfants par nœud, ce qui permet la croissance de l'arbre comme des nœuds sont ajoutés, mais peut ne pas permettre les doublons. (La valeur par défaut de la mise en œuvre d'une application Java TreeMap ne permettent pas de doublons)
Il existe des cas particuliers à prendre en compte, par exemple, que si le nombre d'éléments dans une structure de données augmente sans limite ou s'approche de la limite d'une partie sous-jacente de la structure de données? Qu'en est amorti opérations qui effectuent un certain rééquilibrage ou opération de nettoyage?
Par exemple, dans une table de hachage, lorsque le nombre d'éléments dans la table deviennent suffisamment grande, et l'arbitraire le nombre de collisions peuvent se produire. D'autre part, les arbres nécessitent habituellement viennent de ré-équilibrage de la procédure après l'insertion (ou la suppression).
Donc, si vous avez quelque chose comme un cache (Ex. le nombre d'éléments dans borné, ou la taille est connue), puis une table de hachage est probablement votre meilleur pari; toutefois, si vous avez quelque chose de plus comme un dictionnaire (Ex. remplis une fois et regardé plusieurs fois) puis je utiliser un arbre.
Ce n'est que dans le cas général, cependant, aucune information n'a été donnée). Vous devez comprendre les processus qui se passent comment ils arrivent à faire le bon choix en décidant de quelle structure de données à utiliser.
Quand j'ai besoin d'un multi-carte (à distance de recherche) ou triés à l'aplatissement d'une collection, il ne peut pas être une table de hachage.