Sobes.tech
Junior — Middle

Маслиҳат диҳед, ки чӣ гуна метавон дар кор бо ҷадвалҳои хеш, дар ҳолати рӯй додани ҳамҷоягӣ, роҳҳои бартараф карданро нишон дод?

sobes.tech AI

Ҷавоб аз AI

Ҳоштабли таблицалар билан ишлашда, турли калитлар бир хил ҳошияга хешланганида, тўқнашувлар (collision) юзага келади. Тўқнашувларни ҳал қилишнинг асосий усуллари:

  1. Занҷирлаш усули (chaining) — ҳар бир ҳоштабли таблица ҳужайрасида, унга тушган элементларнинг боғланган рўйхати сақланади. Тўқнашув бўлганда, янги элемент рўйхатга қўшилади.

  2. Очиқ манзиллаш (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))
    }
}

Шунинг учун, усулни танлаш ишлаш тезлиги ва хотира талабларига боғлиқ.