Sobes.tech
Junior — Middle

Hash tablolarıyla çalışırken çakışmaları giderme yöntemlerine örnekler verebilir misin?

sobes.tech yapay zeka

AI'dan gelen yanıt

Hash tablolarıyla çalışırken, farklı anahtarların aynı hücreye hashlenmesi durumunda çakışmalar (kesişmeler) meydana gelir. Çakışmaları çözmenin temel yolları:

  1. Zincirleme yöntemi (chaining) — her hash tablosu hücresinde, o hücreye düşen öğelerin bağlı listesi saklanır. Çakışma durumunda, yeni öğe listeye eklenir.

  2. Açık adresleme (open addressing) — çakışma durumunda, belirli bir kurala göre (doğrusal tarama, kuadratik tarama, çift hash) bir sonraki boş hücre aranır.

Zincirleme yöntemine örnek:

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))
    }
}

Bu nedenle, yöntem seçimi performans ve bellek gereksinimlerine bağlıdır.