Sobes.tech
Junior — Middle

Podes dar exemplos de métodos para resolver colisões ao trabalhar com tabelas de hash?

sobes.tech IA

Resposta da IA

Ao trabalhar com tabelas de hash, colisões (colisões) ocorrem quando diferentes chaves são hashadas na mesma célula. As principais formas de resolver colisões:

  1. Método de encadeamento (chaining) — em cada célula da tabela de hash, armazena-se uma lista ligada de elementos que caíram nessa célula. Quando ocorre uma colisão, o novo elemento é adicionado à lista.

  2. Endereçamento aberto (open addressing) — em caso de colisão, busca-se a próxima célula livre de acordo com uma regra determinada (sondagem linear, sondagem quadrática, duplo hashing).

Exemplo do método de encadeamento:

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

Assim, a escolha do método depende dos requisitos de desempenho e memória.