Sobes.tech
Junior

Iš kokių komponentų sudaryta žemės ūkio lentelė?

sobes.tech AI

Atsakymas iš AI

Žemės lentelė sudaryta iš dviejų pagrindinių komponentų:

  1. Masyvas (arba sąrašas) dėžučių (buckets): Tai pagrindinė saugojimo struktūra. Kiekviena dėžutė gali turėti vieną arba kelis duomenų elementus (raktas-reikšmė poros).

  2. Hesh funkcija: Algoritmas, kuris paverčia įeinantį raktą į skaitmeninį indeksą, naudojamą nustatyti, kur turi būti saugomas arba rastas atitinkamas duomenų elementas.

Be to, kolizijų (situacijų, kai skirtingi raktai heshinami į tą patį indeksą) sprendimui naudojami tokie mechanizmai:

  • Grandinės metodas (chaining): Kiekvienoje dėžutėje saugomas sąrašas (pavyzdžiui, susietas sąrašas) elementų, kurie buvo heshinami į tą indeksą.
  • Atvirosios adresacijos metodas (open addressing): Kolizijos atveju algoritmas ieško kitos laisvos dėžutės, sekdamas tam tikrą strategiją (linijinis bandymas, kvadratinis bandymas, dvigubas heshinimas).
# Paprastos hesh funkcijos pavyzdys
def simple_hash(key, array_size):
    # Raktą paversti į skaičių
    if isinstance(key, str):
        hash_value = sum(ord(char) for char in key)
    elif isinstance(key, int):
        hash_value = key
    else:
        raise TypeError("Nepalaikomas rakto tipas")

    # Grąžinti indeksą masyvo ribose
    return hash_value % array_size

# Grandinės metodo komponento pavyzdys
class HashTable:
    def __init__(self, size):
        self.size = size
        self.array = [[] for _ in range(self.size)] # Sąrašas sąrašų (grandinių)

    def insert(self, key, value):
        index = simple_hash(key, self.size)
        self.array[index].append((key, value)) # Pridėti raktas-reikšmė porą į sąrašą

    def search(self, key):
        index = simple_hash(key, self.size)
        for k, v in self.array[index]:
            if k == key:
                return v
        return None # Raktas nerastas