Middle+
როდესაც ჰეშის გადახედვა ხდება, ჰეში რჩება იგივე, თუ ახალი გამოითვლება გასაღებისთვის?
sobes.tech AI
პასუხი AI-სგან
დატა სტრუქტურებში, როგორიცაა ჰეშ ტაბლები, თითოეულ გასაღებზე ახალი ჰეშია გამოთვლილი. ეს დაკავშირებულია იმასთან, რომ ტაბლას ზომა იცვლება და ელემენტების სწორად განაწილებისთვის ახალ კალათებში, აუცილებელია ახალი ზომის გათვალისწინებით ჰეშის გადათვლა.
მნიშვნელოვანია, რომ ძველი ჰეში არ ინახება, არამედ თითოეულ გასაღებაზე კვლავ იძახება ჰეშის ფუნქცია, და შედეგი გამოიყენება ახალი პოზიციის განსაზღვრაში გაფართოებულ ტაბლაში.
მაგალითი Go-ში:
// როდესაც ტაბლას ზომა იზრდება, იძახება 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)
}
}
}
ამიტომ, გასაღებისთვის ჰეში კვლავ იანგარიშება rehash-ის დროს.