Простенькая задачка из problem solving with algorithms and data structures.
Есть хеш-таблица с определенным размером - равным простому числу.
При определенной заполненности необходимо увеличить ее размер, чтобы избежать чрезмерных коллизий.
Собственно как вычислить эту заполненность?
Как увеличить?(мое предположение в два раза и поиск ближайшего простого числа)
И что делать с элементами, которые уже есть в таблице? (хешировать заново по новому размеру?)
Для наглядности начало таблицы:
class Map:
def __init__(self, size=11):
self.size = size
self.slots = [None] * self.size
self.data = [None] * self.size
def put(self, key, data):
hashvalue = self.hashfunction(key, len(self.slots))
if self.slots[hashvalue] == None:
self.slots[hashvalue] = key
self.data[hashvalue] = data
else:
if self.slots[hashvalue] == key:
self.data[hashvalue] = data
else:
nextslot = self.rehash(key, len(self.slots))
while self.slots[nextslot] != None and \
self.slots[nextslot] != key:
nextslot = self.rehash(nextslot,len(self.slots))
if self.slots[nextslot] == None:
self.slots[nextslot] = key
self.data[nextslot] = data
else:
self.data[nextslot] = data