Junior — Middle
Môžeš uviesť príklady spôsobov riešenia kolízií pri práci s hash tabuľkami?
sobes.tech AI
Odpoveď od AI
Pri práci s hash tablicami nastávajú kolízie (collision), keď sa rôzne kľúče hashujú do rovnakej bunky. Hlavné spôsoby riešenia kolízií:
-
Metóda reťazcov (chaining) — v každej bunke hash tabuľky sa uchováva prepojený zoznam prvkov, ktoré do nej spadli. Pri kolízii sa nový prvok pridá do zoznamu.
-
Otvárané adresovanie (open addressing) — pri kolízii sa hľadá nasledujúca voľná bunka podľa určitého pravidla (lineárne sondovanie, kvadratické sondovanie, dvojité hashovanie).
Príklad metódy reťazcov:
class HashTable {
var buckets: [[(key: String, value: Int)]]
init(size: Int) {
buckets = Array(repeating: [], count: size)
}
func hash(_ key: String) -> Int {
return abs(key.hashValue) % buckets.count
}
func insert(key: String, value: Int) {
let index = hash(key)
buckets[index].append((key, value))
}
}
Výber metódy závisí od požiadaviek na výkon a pamäť.