Junior
Iš kokių komponentų sudaryta žemės ūkio lentelė?
sobes.tech AI
Atsakymas iš AI
Žemės lentelė sudaryta iš dviejų pagrindinių komponentų:
-
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).
-
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