我正在尝试在python中实现哈希表。我正在努力调整哈希表的大小,以防有重复的地址或哈希表太小。
这是我的构造函数,
def __init__(self):
self.table_size = [11, 23, 47, 97, 197, 397, 797, 1597, 3203, 6421,
12853,
25717, 51437, 102877, 205759, 411527, 823117, 1646237,
3292489, 6584983, 13169977, 26339969, 52679969,
105359939, 210719881, 421439783, 842879579, 1685759167]
self.table_size_index = 0
self.counter = 0
self.size = self.table_size[self.table_size_index]
self.slot = [None] * self.size
self.data = [None] * self.size
table_size
包含足够的素数来创建大哈希表。
table_size_index
表示我正在使用的表格大小。
我的put
功能是,
def put(self, key, val):
hash_value = self.hash_function(key, len(self.slot))
if self.slot[hash_value] == None:
self.slot[hash_value] = key
self.data[hash_value] = val
#self.counter += 1
else:
if self.table_size_index < len(self.table_size) -1 :
self.table_size_index += 1
new_slot = [None] * self.table_size[self.table_size_index]
new_data = [None] * self.table_size[self.table_size_index]
# copying old hash table to new hash table
for i in self.slot:
new_hash_value = self.hash_function(i, len(new_slot))
new_slot[new_hash_value] = i
temp = self.slot.index(i)
new_data[new_hash_value] = self.data[temp]
self.slot = new_slot
self.data = new_data
它始终会打印11
长slot
和data
。如果密钥已存在,则不会增加其大小。我该如何解决这个问题?
提前谢谢!