如何在python中调整哈希表的大小?

时间:2017-06-23 01:24:48

标签: 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,
                  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

它始终会打印11slotdata。如果密钥已存在,则不会增加其大小。我该如何解决这个问题? 提前谢谢!

0 个答案:

没有答案