Sobes.tech
Junior — Middle

Можеш ли да дадеш примери за начини за справяне с колизии при работа с хеш таблици?

sobes.tech AI

Отговор от AI

При работа с хеш таблици, колизии (сблъсъци) възникват, когато различни ключове се хешират в една и съща клетка. Основните начини за решаване на колизиите:

  1. Метод на веригата (chaining) — във всяка клетка на хеш таблицата се съхранява свързан списък с елементи, които са попаднали в тази клетка. При колизия, новият елемент се добавя към списъка.

  2. Отворена адресация (open addressing) — при колизия се търси следващата свободна клетка според определено правило (линейно пробиране, квадратично пробиране, двойно хеширане).

Пример за метода на веригата:

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

Изборът на метода зависи от изискванията към производителността и паметта.