我已经在着名教程Learn Python The Hard Way上学习了几天Python。在某个时刻,谈论Exercise 39上的词典,有几个小函数可以这样读:
def hash_key(aMap, key):
"""Given a key this will create a number and then convert it to
an index for the aMap's buckets."""
return hash(key) % len(aMap)
def get_bucket(aMap, key):
"""Given a key, find the bucket where it would go."""
bucket_id = hash_key(aMap, key)
return aMap[bucket_id]
现在,听起来模糊不清的是第一个函数决定了bucket id的方式。 假设我想找到关键字“myCoolKey”的存储桶,那么Python将会: hash('myCoolKey')%len(aMap),如果是 len(aMap)为“256”将导致“139”。 因此,继续阅读,如果我没有错,'myCoolKey'将被分配到一个地理位置槽139.
现在:
答案 0 :(得分:1)
哈希表的目的是为您提供即时查找时间。 %
模数函数用于确保您始终拥有一个在哈希表范围内的密钥(因此没有IndexError
个问题)。在此之前通常会有额外的散列(例如在您的情况下),以尝试确保密钥尽可能均匀分布,以减少冲突。
是的,通用哈希表是可能的。散列表可以通过以下方式解决此问题:1)重新散列值以将其放入另一个插槽中,2)将其放入下一个可用插槽中,或者3)将值列表放入该插槽中,而不是仅放入单个值。您的代码似乎与选项3一致。
答案 1 :(得分:0)