Python — моя первая реализация хеш-таблицы линейного зондирования [closed]

Я студент колледжа, который только начал изучать хеш-таблицы. Моя хеш-таблица использует линейное зондирование. Я создал структуру данных, которая динамически удваивается при достижении полной емкости. У меня проблемы с поиском в хеш-таблице после того, как она увеличилась вдвое. Иногда я получаю ложное срабатывание и не могу понять почему. Нужно ли мне перехешировать после того, как я это сделаю?

Дополнительный вопрос: что мне нужно изменить программно, чтобы использовать схему квадратичного зондирования?

class HashLinearProbe:
    def __init__(self):
        self.hashtable_size = 11
        self.hashtable = [0] * self.hashtable_size

    def hashcode(self, key):
        return (2*key+5) % self.hashtable_size

    def lprobe(self, element):
        i = self.hashcode(element)
        j = 0
        while self.hashtable[(i+j) % self.hashtable_size] != 0:
            if (i+j) > self.hashtable_size:
                self._doublesize()           
            j = j + 1
        return (i + j) % self.hashtable_size    
    
    def _doublesize(self):
        print("Doubled hash table size.")
        self.hashtable_size *= 2
        new_hash_table = [0] * self.hashtable_size
        print(new_hash_table)
        for i in range(len(self.hashtable)):
            new_hash_table[i] = self.hashtable[i]
        self.hashtable = new_hash_table
            

    def insert(self, element):
        i = self.hashcode(element)
        if self.hashtable[i] == 0:
            print(f"Inserted element {element} at index {i}")
            self.hashtable[i] = element
        else:
            i = self.lprobe(element)
            print(f"Inserted element {element} at index {i}")
            self.hashtable[i] = element

    def search(self, key):
        i = self.hashcode(key)
        j = 0
        while self.hashtable[(i+j) % self.hashtable_size] != key:
            if self.hashtable[(i+j) % self.hashtable_size] == 0:
                return False
            j = j + 1
        return True

    def display(self):
        print(self.hashtable)

HC = HashLinearProbe()
#HC.display()
HC.insert(3)
HC.insert(14)
HC.insert(18)
HC.insert(37)
HC.insert(9)
HC.insert(92)
HC.insert(21)
HC.insert(86)
HC.insert(11)
HC.insert(42)
HC.insert(55)
HC.insert(64)
HC.insert(96)
HC.display()
print(HC.search(96))

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *