Sobes.tech
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-ის დროს.