Sobes.tech
Junior — Middle

შეგიძლიათ მიაწოდოთ მაგალითები ჰეშ-ცხრილების მუშაობისას დაპირისპირების აღმოსაფხვრელად მეთოდების შესახებ?

sobes.tech AI

პასუხი AI-სგან

ჰეშ მაგიდებთან მუშაობისას, კონფლიქტები (collision) წარმოიქმნება, როდესაც სხვადასხვა გასაღებები ერთსა და იმავე უჯრაში ჰეშდება. კონფლიქტების გადაჭრის ძირითადი მეთოდებია:

  1. ზღაპრის მეთოდი (chaining) — თითოეულ ჰეშ მაგიდის უჯრაში ინახება დაკავშირებული სია, რომელშიც მოხვედრილ ელემენტებს ინახავს. კონფლიქტის შემთხვევაში, ახალი ელემენტი ემატება სიას.

  2. გახსნილი მისამართი (open addressing) — კონფლიქტის დროს, გარკვეული წესის მიხედვით (გრძივი ძიება, კვადრატული ძიება, ორმაგი ჰეშირება) ეძებენ შემდეგ თავისუფალ უჯრას.

ზღაპრის მეთოდის მაგალითი:

class HashTable {
    var buckets: [[(key: String, value: Int)]]
    
    init(size: Int) {
        buckets = Array(repeating: [], count: size)
    }
    
    func hash(_ key: String) -> Int {
        return abs(key.hashValue) % buckets.count
    }
    
    func insert(key: String, value: Int) {
        let index = hash(key)
        buckets[index].append((key, value))
    }
}

ამიტომ, მეთოდის არჩევანი დამოკიდებულია შესრულებისა და მეხსიერების მოთხოვნებზე.