Milliseid meetodeid kasutad kolisjonide käsitlemiseks hajutustabelites?
sobes.tech AI
Vastus AI-lt
Hash-tabelites kasutatakse tavaliselt kahe peamise meetodi abil kokkupõrgete lahendamiseks:
-
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.
-
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.