|
La recherche procède essentiellement de la même façon que l'insertion: on calcule une adresse grâce à la fonction primaire. Si la case trouvée contient la clef, la recherche termine avec succès. Si la case trouvée est vide, la recherche termine avec échec. Si la case n'est pas vide (marquée comme ayant déjà été occupée mais ne contenant pas de clef ou encore qu'elle contient une clef autre) on aura recours à la technique de résolution de collisions pour trouver la clef ou pour déterminer qu'elle ne se trouve pas dans la table Si on recours à la résolution chaînée, il suffit de fouiller la liste pointée par la valeur hashée pour déterminer si la clef que l'on cherche est dans la table ou non.
Il en va de même avec la résolution par buckets. Nous n'avons qu'un bucket à examiner pour déterminer si la table contient la clef ou non; et cette recherche peut être implémentée de façon fort efficace en s'assurant, par exemple, que le contenu des buckets demeure trié. La résolution par adressage ouvert est un peu différente: il s'agit de parcourrir diverses cases de la table (dans un ordre généré par la fonction de hash secondaire) jusqu'à ce que nous trouvions une case contenant la clef ou une case vide. Une case est vide si elle ne contient pas de clef ou si elle n'est pas marquée comme ayant été effacée. Voyez pourquoi à la prochaine section, la suppression. |