Sobes.tech
Junior — Middle

Կարող եք տալ օրինակներ այն միջոցների մասին, որոնք կարող են կիրառվել հեշ-թերթերի աշխատանքում բախումները վերացնելու համար?

sobes.tech AI

Պատասխան AI-ից

Երբ աշխատում եք հեշ աղյուսակների հետ, բախումներ (collision) են առաջանում, երբ տարբեր բանալիները հեշավորվում են նույն բջիջում: Բախումները լուծելու հիմնական եղանակները:

  1. Շղթայական մեթոդ (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))
    }
}

Այսպիսով, մեթոդի ընտրությունը կախված է կատարողականության և հիշողության պահանջներից:

  1. Բաց հասցեագրման մեթոդ (open addressing) — բախման դեպքում, ըստ որոշակի կանոնի (ուղղահայաց որոնում, քառակուսային որոնում, կրկնակի հեշավորում) որոնվում է հաջորդ ազատ բջիջը։