Sobes.tech
Junior — Middle

Milliseid meetodeid kasutad kolisjonide käsitlemiseks hajutustabelites?

sobes.tech AI

Vastus AI-lt

Hash-tabelites kasutatakse tavaliselt kahe peamise meetodi abil kokkupõrgete lahendamiseks:

  1. Kettimine (Chaining) — kokkupõrke korral salvestatakse kõik sama hash väärtusega elemendid seotud nimekirja või muusse konteinerisse samas massiivi lahtris. Otsingu või sisestamise ajal läbitakse see nimekiri.

  2. Ava aadressimine (Open Addressing) — kokkupõrke korral otsitakse järgmine vaba lahter kindla järjestuse järgi (jooneline otsing, kvadratiivne otsing, topelt-hashimine).

Go standardne map-i rakendus kasutab kettimise meetodit koos optimeerimistega. Näiteks, kokkupõrke korral salvestatakse elemendid seotud nimekirjades sisemiselt buckettides.

Lihtsustatud kettimise näide:

// Elemendi struktuur
type entry struct {
    key string
    value int
    next *entry
}

// Kettimisega sisestamine
func insert(table []*entry, key string, value int) {
    index := hash(key) % len(table)
    e := &entry{key: key, value: value, next: table[index]}
    table[index] = e
}

Seega on kokkupõrgete lahendamine viis säilitada hash-tabeli õigsust ja tõhusust, kui hash-väärtused kattuvad.