Sobes.tech
Middle+

Při přehašování zůstává hash stejný nebo se pro klíč vypočítá nový?

sobes.tech AI

Odpověď od AI

Při rehashování v datových strukturách, jako jsou hash tabulky, se pro každý klíč vypočítá nový hash. To je způsobeno tím, že velikost tabulky se mění, a aby bylo možné správně rozdělit prvky do nových košů, je nutné přepočítat hash s ohledem na novou velikost.

Jinými slovy, starý hash se neuchovává, ale pro každý klíč se znovu volá hashovací funkce a výsledek se používá k určení nové pozice v rozšířené tabulce.

Příklad v Go:

// Při zvětšení velikosti tabulky se volá rehash
func (ht *HashTable) rehash() {
    oldBuckets := ht.buckets
    ht.buckets = make([][]Entry, newSize)
    for _, bucket := range oldBuckets {
        for _, entry := range bucket {
            newIndex := hash(entry.key) % newSize
            ht.buckets[newIndex] = append(ht.buckets[newIndex], entry)
        }
    }
}

Tímto způsobem je hash pro klíč znovu vypočítán při rehashování.