Junior — Middle
შეგიძლიათ მიაწოდოთ მაგალითები ჰეშ-ცხრილების მუშაობისას დაპირისპირების აღმოსაფხვრელად მეთოდების შესახებ?
sobes.tech AI
პასუხი AI-სგან
ჰეშ მაგიდებთან მუშაობისას, კონფლიქტები (collision) წარმოიქმნება, როდესაც სხვადასხვა გასაღებები ერთსა და იმავე უჯრაში ჰეშდება. კონფლიქტების გადაჭრის ძირითადი მეთოდებია:
-
ზღაპრის მეთოდი (chaining) — თითოეულ ჰეშ მაგიდის უჯრაში ინახება დაკავშირებული სია, რომელშიც მოხვედრილ ელემენტებს ინახავს. კონფლიქტის შემთხვევაში, ახალი ელემენტი ემატება სიას.
-
გახსნილი მისამართი (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))
}
}
ამიტომ, მეთოდის არჩევანი დამოკიდებულია შესრულებისა და მეხსიერების მოთხოვნებზე.