哈希表是一种高效的数据结构,它可以提供快速的插入、删除和查找操作。哈希表的基本思想是将键通过一个哈希函数映射到一个连续的地址空间上,然后在这个地址空间上进行查找、插入和删除操作。下面将详细介绍哈希表的相关概念和实现方法。
哈希函数是哈希表的核心,它将键映射到哈希表的索引上。一个理想的哈希函数应该易于计算,并且能够将不同的键均匀地分布到哈希表中。哈希函数的设计取决于键的类型和哈希表的大小。常见的哈希函数包括:
由于哈希函数将键映射到一个有限的地址空间上,因此可能会出现两个或多个键映射到同一个地址上的情况,这种情况称为冲突。解决冲突的方法主要有两种:
负载因子是哈希表中已存储的键值对数量与哈希表大小的比值。当负载因子超过某个阈值时,哈希表的性能会下降,因此需要动态扩展哈希表。动态扩展通常包括创建一个更大的新表,然后将所有现有的键值对重新插入到新表中。
class HashTable:
def __init__(self, size):
self.size = size
self.table = [[] for _ in range(size)]
def hash_function(self, key):
return hash(key) % self.size
def insert(self, key, value):
index = self.hash_function(key)
for kvp in self.table[index]:
if kvp[0] == key:
kvp[1] = value
return
self.table[index].append([key, value])
def search(self, key):
index = self.hash_function(key)
for kvp in self.table[index]:
if kvp[0] == key:
return kvp[1]
return None
def delete(self, key):
index = self.hash_function(key)
for i, kvp in enumerate(self.table[index]):
if kvp[0] == key:
del self.table[index][i]
return