Junior
Ի՞նչ բաղադրիչներից է բաղկացած հեշ-թերթը։
sobes.tech AI
Պատասխան AI-ից
Հեշ աղյուսակը բաղկացած է երկու հիմնական բաղադրիչներից.
-
Տարր (կամ ցանկ) բջիջներից (կաթոցներ): Սա հիմնական պահեստավորման կառուցվածքն է: Յուրաքանչյուր բջիջ կարող է պարունակել մեկ կամ ավելի տվյալների տարրեր (հաջորդական զույգեր՝ բանալի-արժեք):
-
Հեշ ֆունկցիա: Ալգորիթմը, որը մուտքային բանալին վերածում է թվային ինդեքսի, որը օգտագործվում է որոշելու համար, թե որտեղ պետք է պահել կամ գտնել համապատասխան տվյալների տարր:
Բացի այդ, կոլիզիաները լուծելու համար (երբ տարբեր բանալիներ հեշավորվում են նույն ինդեքսին), օգտագործվում են մեխանիզմներ, ինչպիսիք են՝
- Շղթայական մեթոդը: Յուրաքանչյուր բջիջում պահվում է ցանկ (օրինակ՝ կապված ցանկ) այն տարրերի, որոնք հեշավորվել են այդ ինդեքսին:
- Բաց հասցեագրման մեթոդը: Կոլիզիայի դեպքում, ալգորիթմը որոնում է հաջորդ ազատ բջիջը որոշված ռազմավարությամբ (ուղղահայաց որոնում, քառակուսային որոնում, երկկողմ հեշավորում):
# Պարզ hash ֆունկցիայի օրինակ
def simple_hash(բանալի, զանգվածի_չափը):
# Բանալի վերածում թիվի
if isinstance(բանալի, str):
hash_արժեք = sum(ord(ատոմ), for ատոմ in բանալի)
elif isinstance(բանալի, int):
hash_արժեք = բանալի
else:
raise TypeError("Անընդունելի բանալիի տիպ")
# Վերադարձնել ինդեքսը զանգվածի չափի մեջ
return hash_արժեք % զանգվածի_չափը
# Շղթայական մեթոդի համար բջջի բաղադրիչի օրինակ
class HashTable:
def __init__(self, չափը):
self.չափը = չափը
self.array = [[] for _ in range(self.չափը)] # Ցանցի ցանկեր (շղթաներ)
def ավելացնել(self, բանալի, արժեք):
ինդեքս = simple_hash(բանալի, self.չափը)
self.array[ինդեքս].append((բանալի, արժեք)) # Ավելացնել բանալի-արժեք զույգը ցանկին
def որոնել(self, բանալի):
ինդեքս = simple_hash(բանալի, self.չափը)
for k, v in self.array[ինդեքս]:
if k == բանալի:
return v
return None # Բանալի չի գտնվել