Привет, я новичок в Python и реализовал хеш-таблицу, используя линейное зондирование для разрешения коллизий.Если два ключа хешируются в одной и той же позиции, то столкновение происходит только один раз, и последующие попытки разрешить его - это длина зонда.Я изменил свою функцию set item, чтобы отслеживать количество коллизий и длину зонда. Но я не знаю, как получить коллизии и длину зонда из функции, потому что элемент set вызывается так: my_table ["Julian"]= "FIT1008"?
def __setitem__(self, key, value):
position = self.hash_value(key)
sameKeyCollision=False
for _ in range(self.table_size):
if self.array[position] is None:#found empty slot, collision resolve
self.array[position] = (key, value)
self.count += 1
sameKeyCollision=False
return
elif self.array[position][0] == key:#found key
self.array[position] = (key, value)#update value, no collision
return
elif self.array[position][0] !=key and sameKeyCollision==False:#not found try next,first time collision
position = (position+1) % self.table_size
self.totalProbeLength+=1
self.collision+=1
sameKeyCollision=True
elif self.array[position][0] !=key and sameKeyCollision==True:#probing
position = (position+1) % self.table_size
self.totalProbeLength+=1
raise ValueError("Table is Full!")
Это мой конструктор:
def __init__(self, size=30):
self.count = 0
self.table_size = size
self.array = build_array(self.table_size)
self.collision=0
self.totalProbeLength=0
Я не проверял свой код, потому что я не знаю, как получить probeLength и столкновение от моегоустановить функцию элемента, поэтому я прошу прощения за любые ошибки и прошу указать им. Спасибо!
РЕДАКТИРОВАТЬ: Хорошо, я только что понял, что могу объявить переменную класса, а затем обращаться к ней напрямую, как self.collision и self.totalProbeLength.Howeverони оба продолжают возвращать 0?