Sobes.tech
Junior

Koks yra hash lentelės veikimo principas?

sobes.tech AI

Atsakymas iš AI

Žemės-atsitiktinė lentelė (arba asocijuotas masyvas) saugo "raktas-reikšmė" poras. Jos veikimo principas pagrįstas žemės-atsitiktinės funkcijos naudojimu, kuri paverčia raktą skaitmeniniu indeksu (žemės-atsitiktiniu), nurodančiu saugojimo vietą masyve (krepšelyje).

Žingsniai:

  1. Žemės-atsitiktinės funkcijos apskaičiavimas: duotam raktui apskaičiuojamas žemės-atsitiktinis:
    <?php
    $key = "example";
    $hash = crc32($key); // Paprastos žemės-atsitiktinės funkcijos pavyzdys
    
  2. Indekso nustatymas: Žemės-atsitiktinis paverčiamas masyvo indeksu, dažniausiai naudojant modulių operaciją su masyvo dydžiu:
    <?php
    $arraySize = 10;
    $index = $hash % $arraySize;
    
  3. Prieiga prie krepšelio: Apskaičiuotas indeksas leidžia pasiekti atitinkamą masyvo krepšelį:
  4. Kolizijų sprendimas: Kadangi skirtingi raktai gali turėti tą patį žemės-atsitiktinį (kolizija), krepšelis gali turėti kelis "raktas-reikšmė" poras. Kolizijų sprendimo būdai:
    • Atskirų grandinių metodas (Separate Chaining): Kiekviename krepšelyje saugoma sąrašas (pvz., susietas sąrašas) "raktas-reikšmė" porų, kurių žemės-atsitiktiniai sutampa.
    • Atvirosios adresacijos metodas (Open Addressing): Jei įvyksta kolizija, ieškoma laisvos vietos masyve pagal tam tikrą taisyklę (linijinis, kvadratinis, dvigubas žemės-atsitiktinis).

Operacijos:

  • Įterpimas: Apskaičiuojamas raktas žemės-atsitiktinis, nustatomas indeksas, ir "raktas-reikšmė" pora įdedama į atitinkamą krepšelį. Jei įvyksta kolizija, ji pridedama prie sąrašo (grandinės) arba ieškoma laisva vieta (atvira adresacija).
  • Paieška: Apskaičiuojamas raktas žemės-atsitiktinis, nustatomas indeksas. Atitinkamame krepšelyje ieškoma reikšmė pagal raktą. Atkelių grandinių atveju pereinama per sąrašo elementus; atviro adresavimo atveju atliekama sekli paieška.
  • Šalinimas: Apskaičiuojamas raktas žemės-atsitiktinis, nustatomas indeksas. Atitinkamame krepšelyje randama ir ištrinama pora pagal raktą.

Privalumai:

  • Greita prieiga prie elementų (vidutiniškai O(1)).
  • Efektyvus atminties naudojimas.

Trūkumai:

  • Kolizijų daugėjimas gali bloginti našumą.
  • Lentelės dydis gali reikėti koreguoti (perdirbti - rehashing), siekiant išlaikyti efektyvumą.