Sobes.tech
Middle+

Pri prehashovaní zostáva hash rovnaký alebo sa pre kľúč vypočíta nový?

sobes.tech AI

Odpoveď od AI

Pri prepočítavaní hashu (rehashing) v dátových štruktúrach, ako sú hash tabuľky, sa pre každý kľúč vypočíta nový hash. To je spôsobené tým, že veľkosť tabuľky sa mení, a aby sa správne rozdelili prvky do nových košov, je potrebné prepočítať hash s ohľadom na novú veľkosť.

Inými slovami, starý hash sa neuchováva, ale pre každý kľúč sa znovu volá funkcia hashovania a výsledok sa používa na určenie novej pozície v rozšírenej tabuľke.

Príklad v Go:

// Pri zväčšení veľkosti tabuľky sa 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)
        }
    }
}

Takto je hash pre kľúč znovu vypočítaný počas rehashingu.