Junior — Middle
Quelles méthodes peuvent être utilisées pour réduire la probabilité de collisions lors de l'utilisation de tables de hachage?
sobes.tech IA
Réponse de l'IA
Pour réduire la probabilité de collisions dans les tables de hachage, les méthodes suivantes sont utilisées:
-
Choisir une bonne fonction de hachage — la fonction doit répartir uniformément les clés dans la table de hachage, minimisant ainsi la probabilité de collisions.
-
Augmenter la taille de la table — plus la taille du tableau est grande, moins il y a de chances que deux clés tombent dans la même cellule.
-
Utiliser des méthodes de résolution des collisions :
- Adresse ouverte (sondage linéaire, sondage quadratique, double hachage) — en cas de collision, la recherche de la prochaine cellule libre est effectuée.
- Chaînes (chaining) — chaque cellule contient une liste chaînée ou un autre conteneur pour tous les éléments avec le même hash.
-
Rehachage (redimensionnement) — lorsque le facteur de charge atteint un certain seuil, la taille est augmentée et les éléments sont redistribués.
Exemple en Kotlin (chaînes) :
class HashTable<K, V>(val size: Int) {
private val buckets = Array<MutableList<Pair<K, V>>>(size) { mutableListOf() }
private fun hash(key: K): Int = key.hashCode().absoluteValue % size
fun put(key: K, value: V) {
val index = hash(key)
val bucket = buckets[index]
val existing = bucket.indexOfFirst { it.first == key }
if (existing >= 0) bucket[existing] = key to value
else bucket.add(key to value)
}
fun get(key: K): V? {
val index = hash(key)
return buckets[index].firstOrNull { it.first == key }?.second
}
}