Sobes.tech
Junior

Ի՞նչ բաղադրիչներից է բաղկացած հեշ-թերթը։

sobes.tech AI

Պատասխան AI-ից

Հեշ աղյուսակը բաղկացած է երկու հիմնական բաղադրիչներից.

  1. Տարր (կամ ցանկ) բջիջներից (կաթոցներ): Սա հիմնական պահեստավորման կառուցվածքն է: Յուրաքանչյուր բջիջ կարող է պարունակել մեկ կամ ավելի տվյալների տարրեր (հաջորդական զույգեր՝ բանալի-արժեք):

  2. Հեշ ֆունկցիա: Ալգորիթմը, որը մուտքային բանալին վերածում է թվային ինդեքսի, որը օգտագործվում է որոշելու համար, թե որտեղ պետք է պահել կամ գտնել համապատասխան տվյալների տարր:

Բացի այդ, կոլիզիաները լուծելու համար (երբ տարբեր բանալիներ հեշավորվում են նույն ինդեքսին), օգտագործվում են մեխանիզմներ, ինչպիսիք են՝

  • Շղթայական մեթոդը: Յուրաքանչյուր բջիջում պահվում է ցանկ (օրինակ՝ կապված ցանկ) այն տարրերի, որոնք հեշավորվել են այդ ինդեքսին:
  • Բաց հասցեագրման մեթոդը: Կոլիզիայի դեպքում, ալգորիթմը որոնում է հաջորդ ազատ բջիջը որոշված ռազմավարությամբ (ուղղահայաց որոնում, քառակուսային որոնում, երկկողմ հեշավորում):
# Պարզ 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 # Բանալի չի գտնվել