Middle
Millised omadused peaks hea hash-funktsioonil olema?
sobes.tech AI
Vastus AI-lt
Hea hash-funktsioon peaks omama järgmisi omadusi:
- Determinism: sama sisendväärtuse puhul peab ta alati tagastama sama hash-i.
- Ühtlane jaotus: minimeerida kokkupõrkeid, jaotada väärtused ühtlaselt hash-ruumis.
- Kiirus: peaks arvutama kiiresti, et mitte aeglustada programmi tööd.
- Kokkupõrgete vastupanu: erinevad sisendandmed peaksid suure tõenäosusega andma erinevad hash-id.
- Vähemal määral tundlik sarnaste sisendite suhtes: väike muudatus sisendandmetes peaks põhjustama märkimisväärset muutust hash-is (lavina efekt).
Näide Go keeles, kasutades sisseehitatud hash/fnv paketti, stringi hash-i arvutamiseks:
import (
"fmt"
"hash/fnv"
)
func hash(s string) uint32 {
h := fnv.New32a()
h.Write([]byte(s))
return h.Sum32()
}
func main() {
fmt.Println(hash("example"))
}