Junior — Middle
Welke methoden kunnen worden gebruikt om de kans op botsingen te verminderen bij het gebruik van hash-tabellen?
sobes.tech AI
Antwoord van AI
Om de kans op botsingen in hash-tabellen te verminderen, worden de volgende methoden gebruikt:
-
Kies een goede hashfunctie — de functie moet de sleutels gelijkmatig over de hash-tabel verdelen, zodat de kans op botsingen minimaal is.
-
Vergroot de grootte van de tabel — hoe groter de array, hoe kleiner de kans dat twee sleutels in dezelfde cel terechtkomen.
-
Gebruik methoden voor het oplossen van botsingen:
- Open adressering (lineair zoeken, kwadratisch zoeken, dubbele hashing) — bij botsing wordt de volgende vrije cel gezocht.
- Chaining (kettingvorming) — elke cel bevat een gekoppelde lijst of een andere container voor alle elementen met dezelfde hash.
-
Rehashing (resizing) — wanneer een bepaald laadfactor wordt bereikt, wordt de grootte vergroot en worden de elementen opnieuw verdeeld.
Voorbeeld in Kotlin (chaining):
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
}
}