【发布时间】:2014-05-20 12:05:59
【问题描述】:
我正在创建一个散列函数,但对将大小加倍、重新散列值、然后继续使用新表感到困惑。我所做的是创建一个单独的数组来只存储键,这样我就可以重新散列它(因为 self.table 存储键和值)但是当我运行它时,它会创建新表但值的散列最终没有发生。谁有想法?
class Hashing(object):
def __init__(self,size):
self.array_size = size
self.table = self.array_size * [None]
self.size = 0
self.keyList = []
def _hash(self,key):
pos = key
print key, " ", pos % self.array_size
return pos % self.array_size
def doubleSize(self):
self.array_size = self.array_size*2
self.table = (self.array_size) * [None]
doubleHash = Hashing(self.array_size)
i = 0
for each in self.keyList:
print "Each ", each
doubleHash[each] = i
i += 1
print "double", self.table
def __setitem__(self,key,value):
if self.size > self.array_size/2:
self.doubleSize()
pos = self._hash(key)
while True:
if self.table[pos] is not None:
if self.table[pos][0] == key:
self.table[pos] = (key,value)
return
else:
self.table[pos] = (key,value)
self.keyList.append(key)
self.size += 1
return
pos = (pos + 1) % self.array_size
和 main(因为 Python 没有更好的词...)
from Hashing import Hashing
myHash = Hashing(4)
i = 0
myArray = [1,12,13,11]
for each in myArray:
myHash[each] = i
i += 1
【问题讨论】: