📅  最后修改于: 2023-12-03 15:26:08.932000             🧑  作者: Mango
哈希表(Hash Table)是一种基于键(key)直接访问内存存储位置的数据结构,通常用于快速查找(搜索)和插入(关联数组、字典、符号表等)。当给定一个关键字时,哈希表通过哈希函数(Hash Function)将关键字映射为一个索引值,通过该索引值来查找关键字所对应的值。这个映射关系被称为哈希映射(Hash Mapping)。
哈希表的实现有两种形式:开链法和线性探测法。
开链法(Chaining)也称拉链法,是将哈希表中每个桶(Bucket)设置为一个链表(Linked List),每个节点保存一个键和值。当发生哈希冲突时,新的键值对将被插入到桶所对应的链表中。
在理想情况下(即哈希函数对于不同的关键字有很好的散列性),哈希表的查找、插入、删除操作的平均时间复杂度是 O(1),即常数级别。但是在最坏情况下,哈希函数可能将所有元素都映射到同一个桶中,此时哈希表的时间复杂度会退化为 O(n),其中 n 是元素个数。因此,为了保证哈希表的性能,在设计哈希函数时需要注意以下几点:
class HashTable:
def __init__(self):
self.size = 10
self.table = [[] for _ in range(self.size)]
def hash_function(self, key):
return hash(key) % self.size
def insert(self, key, value):
hash_value = self.hash_function(key)
for i, item in enumerate(self.table[hash_value]):
if item[0] == key:
self.table[hash_value][i] = (key, value)
return
self.table[hash_value].append((key, value))
def search(self, key):
hash_value = self.hash_function(key)
for item in self.table[hash_value]:
if item[0] == key:
return item[1]
return None
def delete(self, key):
hash_value = self.hash_function(key)
for i, item in enumerate(self.table[hash_value]):
if item[0] == key:
del self.table[hash_value][i]
return