Sobes.tech
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í:

  1. 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.

  2. 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äť.