|
La méthode de résolution de collisions par buckets est elle aussi fort simple. Il s'agit, à chaque case, d'avoir une « page » de m entrées. Une clef qui fait une collision est ajoutée à la page si elle n'en fait pas déjà partie. Quand la page est pleine, l'insertion échoue. ![]() Fig. 1. Résolution par « buckets ». Ici, les cases grises sont libres. L'avantage de cette méthode est qu'on peut assez aisément conserver les pages triées, ce qui donne une recherche très rapide pour une clef dans une page. La recherche est d'autant plus rapide que la taille de la page est contrainte. Le désavantage principal est qu'une fois qu'une page est pleine, l'insertion échoue. On peut toujours minimiser la probabilité d'un tel événement en ayant une table assez grande et une fonction de hash robuste, mais on ne peut pas s'en protéger complètement. Il nous faut donc une stratégie de secours. On pourrait combiner, par exemple, les buckets avec la résolution chaînée et créer une liste de buckets, ce qui demeurerait encore efficace pour la recherche advenant qu'on réussisse à remplir plusieurs buckets consécutifs. On pourrait aussi combiner avec l'adressage ouvert pour trouver un autre bucket qui n'est pas encore plein. |