Sobes.tech
Middle+

Újrahash-eléskor a hash megmarad vagy újat számítanak ki a kulcs számára?

sobes.tech MI

Válasz az MI-től

Rehashing során adatstruktúrákban, például hash-táblákban, minden kulcs esetében új hash érték kerül kiszámításra. Ez azért van, mert a táblázat mérete változik, és hogy helyesen osszuk el az elemeket az új kosarak között, szükséges újra kiszámítani a hash-t az új méret figyelembevételével.

Vagyis, a régi hash nem marad meg, hanem minden kulcs esetében újra meghívják a hash függvényt, és az eredményt használják az új pozíció meghatározására a bővített táblában.

Go példában:

// Amikor a táblázat méretét növelik, rehash hívódik
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)
        }
    }
}

Ezért a kulcs hash értéke újra számításra kerül a rehash során.