Junior — Middle
Կարող եք տալ օրինակներ այն միջոցների մասին, որոնք կարող են կիրառվել հեշ-թերթերի աշխատանքում բախումները վերացնելու համար?
sobes.tech AI
Պատասխան AI-ից
Երբ աշխատում եք հեշ աղյուսակների հետ, բախումներ (collision) են առաջանում, երբ տարբեր բանալիները հեշավորվում են նույն բջիջում: Բախումները լուծելու հիմնական եղանակները:
- Շղթայական մեթոդ (chaining) — յուրաքանչյուր հեշ աղյուսակի բջիջում պահվում է կապակցված ցանկի տարրեր, որոնք ընկել են այդ բջիջում: Բախման դեպքում, նոր տարրն ավելացվում է ցանկին:
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))
}
}
Այսպիսով, մեթոդի ընտրությունը կախված է կատարողականության և հիշողության պահանջներից:
- Բաց հասցեագրման մեթոդ (open addressing) — բախման դեպքում, ըստ որոշակի կանոնի (ուղղահայաց որոնում, քառակուսային որոնում, կրկնակի հեշավորում) որոնվում է հաջորդ ազատ բջիջը։