Я студент колледжа, который только начал изучать хеш-таблицы. Моя хеш-таблица использует линейное зондирование. Я создал структуру данных, которая динамически удваивается при достижении полной емкости. У меня проблемы с поиском в хеш-таблице после того, как она увеличилась вдвое. Иногда я получаю ложное срабатывание и не могу понять почему. Нужно ли мне перехешировать после того, как я это сделаю?
Дополнительный вопрос: что мне нужно изменить программно, чтобы использовать схему квадратичного зондирования?
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))
![Python - моя первая реализация хеш-таблицы линейного зондирования [closed] TheFAQ.ru](https://thefaq.ru/wp-content/uploads/2023/01/logo-250.png)