Junior
რისი კომპონენტებია ჰეშ-ცხრილი?
sobes.tech AI
პასუხი AI-სგან
ჰეშ-ცხრილი შედგება ორი ძირითადი კომპონენტისგან:
-
მასივი (ან სიები) კუპეებში (buckets): ეს არის ძირითადი შენახვის სტრუქტურა. თითოეული კუპე შეიძლება შეიცავდეს ერთ ან რამდენიმე მონაცემთა ელემენტს (კრიპტო-კი-ფასი წყვილი).
-
ჰეშ-ფუნქცია: ალგორითმი, რომელიც გარდაქმნის შემოსულ კრიპტოს რიცხვობრივ ინდექსად, რომელიც გამოიყენება შესაბამისი ელემენტის შენახვის ან პოვნას კუპეში.
გარდა ამისა, კოლიზიების (სიტუაციები, როდესაც სხვადასხვა კრიპტო ერთსა და იმავე ინდექსზე ჰეშდება) გადასაჭრელად გამოიყენება ისეთი მექანიზმები, როგორებიცაა:
- ჯაჭვის მეთოდი (chaining): თითოეულ კუპეში ინახება სია (მაგ., დაკავშირებული სია) იმ ელემენტების, რომლებიც ჰეშირდნენ ამ ინდექსზე.
- გახსნილი მისამართის მეთოდი (open addressing): კოლიზიის დროს, ალგორითმი ეძებს შემდეგ თავისუფალ კუპეს განსაზღვრულ სტრატეგიით (გრძელი სროლა, კვადრატული სროლა, ორმაგი ჰეშირება).
# მარტივი ჰეშ-ფუნქციის მაგალითი
def simple_hash(key, array_size):
# კრიპტოს რიცხვად გარდაქმნა
if isinstance(key, str):
hash_value = sum(ord(char) for char in key)
elif isinstance(key, int):
hash_value = key
else:
raise TypeError("მხარდაჭერილი არ არის ამ ტიპის კრიპტო")
# ინდექსის დაბრუნება მასივის ზომის ფარგლებში
return hash_value % array_size
# ჯაჭვის მეთოდისთვის კუპეების მაგალითი
class HashTable:
def __init__(self, size):
self.size = size
self.array = [[] for _ in range(self.size)] # სია სია (ჯაჭვები)
def insert(self, key, value):
index = simple_hash(key, self.size)
self.array[index].append((key, value)) # კრიპტო-ფასი წყვილის დამატება სიისკენ
def search(self, key):
index = simple_hash(key, self.size)
for k, v in self.array[index]:
if k == key:
return v
return None # კრიპტო არ მოიძებნა