Sobes.tech
Junior — Middle

Můžeš uvést příklady způsobů řešení kolizí při práci s hash tabulkami?

sobes.tech AI

Odpověď od AI

Při práci s hashtabulkami dochází ke kolizím, když různé klíče jsou hashovány do stejné buňky. Hlavní způsoby řešení kolizí:

  1. Metoda řetězení (chaining) — v každé buňce hashtabulky je uložena spojovaná seznam prvků, které do této buňky spadly. Při kolizi je nový prvek přidán do seznamu.

  2. Otevřené adresování (open addressing) — při kolizi se podle určitého pravidla (lineární sondování, kvadratické sondování, dvojité hashování) hledá následující volná buňka.

Příklad metody řetězení:

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))
    }
}

Volba metody závisí na požadavcích na výkon a paměť.