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ı:
-
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.
-
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.