Junior
Hash cədvəli hansı komponentlərdən ibarətdir?
sobes.tech Süni İntellekt
AI-dan cavab
Hash cədvəli iki əsas komponentdən ibarətdir:
-
Array (və ya siyahı) hüceyrələrdən (kublar): Bu, əsas saxlama quruluşudur. Hər hüceyrə bir və ya bir neçə məlumat elementini (açar-dəyər cütləri) saxlaya bilər.
-
Hash funksiyası: Giriş açarını ədədi indeksə çevirən algoritmdir, bu indeks istifadə edilərək müvafiq məlumat elementinin saxlanacağı və ya tapılacağı hüceyrə müəyyən edilir.
Bundan əlavə, toqquşmaları həll etmək üçün (fərqli açarların eyni indekse hash edilməsi halları), aşağıdakı mexanizmlər istifadə olunur:
- Zəncir metodu: Hər hüceyrədə, həmin indeksə hash edilmiş elementlərin siyahısı (məsələn, əlaqəli siyahı) saxlanılır.
- Açıq ünvanlama metodu: Toqquşma baş verdikdə, algoritm müəyyən strategiya ilə növbəti boş hüceyrəni axtarır (xətti axtarış, kvadrat axtarış, cüt hashləmə).
# Sadə hash funksiyası nümunəsi
def simple_hash(anahtar, array_olcusu):
# Açarı ədədləşdirmək
if isinstance(anahtar, str):
hash_dəyəri = sum(ord(simvol) for simvol in anahtar)
elif isinstance(anahtar, int):
hash_dəyəri = anahtar
else:
raise TypeError("Dəstəklənməyən açar tipi")
# Array ölçüsü daxilində indeks qaytarır
return hash_dəyəri % array_olcusu
# Zəncir metodu üçün array hüceyrə komponenti nümunəsi
class HashTable:
def __init__(self, olcusu):
self.olcusu = olcusu
self.array = [[] for _ in range(self.olcusu)] # Siyahılar arrayi (zəncirlər)
def insert(self, anahtar, dəyər):
indeks = simple_hash(anahtar, self.olcusu)
self.array[indeks].append((anahtar, dəyər)) # Açar-dəyər cütlüyünü siyahıya əlavə et
def search(self, anahtar):
indeks = simple_hash(anahtar, self.olcusu)
for k, v in self.array[indeks]:
if k == anahtar:
return v
return None # Açar tapılmadı