Как отслеживать коллизию и общую длину зонда в функции set item моей реализации хеш-таблицы в python? - PullRequest
0 голосов
/ 19 мая 2018

Привет, я новичок в 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...