Sobes.tech
Junior

Хеш таблицасы кайсы компоненттерден турат?

sobes.tech AI

AIден жооп

Хеш-таблица эки эки негизги компоненттерден турат:

  1. Массив (же тизмек) кутучалар (buckets): Бул сактоо структурасы. Ар бир кутуча бир же бир нече маалымат элементтерин (ключ-баа парларын) камтышы мүмкүн.

  2. Хеш-функция: Кирүүчү ачкычты сандык индекске айландыруучу алгоритм, ал белгилүү бир элемент сакталуучу же табылуучу кутучаны аныктоо үчүн колдонулат.

Мындан тышкары, кагаздар (коллизияларды чечүү үчүн, башкача айтканда, ар кандай ачкычтар бир эле индекске хештелгенде) төмөнкү механизмдер колдонулат:

  • Чынжыр метод (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 # Ачкыч табылган жок