如何在python中调整哈希表的大小?
我正在尝试用python实现哈希表。我正在努力调整哈希表的大小,以防地址重复或哈希表太小 这是我的构造器如何在python中调整哈希表的大小?,python,hashtable,Python,Hashtable,我正在尝试用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,
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\u size
包含足够的素数来创建大哈希表。
table\u size\u 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
def put(self、key、val):
hash_value=self.hash_函数(key,len(self.slot))
如果self.slot[哈希值]==无:
self.slot[hash_value]=密钥
self.data[hash_value]=val
#self.counter+=1
其他:
如果self.table\u size\u索引
它总是打印出11
插槽的长度
和数据
。如果密钥已存在,则不会增加其大小。我该怎么修这个?
提前谢谢 这是调试器的问题。你需要自己弄清楚,你从未更新过self.size,但除此之外,我看到了一大堆问题。在没有散列冲突之前,您是否将无限期地增长?通常,您希望实现两种策略中的一种来处理冲突,并且仅当实际条目数超过哈希表大小的某个百分比时才增加表大小。还有其他的bug。另外,请按照帮助链接中的说明提供。
数据
是多余的,并且else
下的语句永远不会执行,请添加一个打印来测试它。@KennyOstrom您的意思是我必须先通过打开寻址来使用所有插槽,然后再增加其大小吗?@obgnaw我会尝试。谢谢您的检查!所有插槽?不,那太疯狂了。查找哈希表。这是调试器的问题。你需要自己弄清楚,你从未更新过self.size,但除此之外,我看到了一大堆问题。在没有散列冲突之前,您是否将无限期地增长?通常,您希望实现两种策略中的一种来处理冲突,并且仅当实际条目数超过哈希表大小的某个百分比时才增加表大小。还有其他的bug。另外,请按照帮助链接中的说明提供。数据
是多余的,并且else
下的语句永远不会执行,请添加一个打印来测试它。@KennyOstrom您的意思是我必须先通过打开寻址来使用所有插槽,然后再增加其大小吗?@obgnaw我会尝试。谢谢您的检查!所有插槽?不,那太疯狂了。查找哈希表。