数据结构与算法-06散列表
散列表
散列表(Hash Table),也称为哈希表,是一种基于哈希函数(Hash Function)实现的数据结构,它支持快速的插入、删除和查找操作。
散列表将每个元素的关键字(Key)通过哈希函数映射到一个固定的位置,称为散列值(Hash Value),然后将元素存储在该位置上。
散列表的核心是哈希函数,它将任意长度的输入(例如字符串、数字等)映射为固定长度的输出,通常是一个整数。
哈希函数应该满足以下要求:
- 一致性:对于相同的输入,哈希函数应该产生相同的输出。
- 均匀性:哈希函数应该将输入均匀地映射到输出空间中的不同位置。
- 高效性:哈希函数应该能够在常数时间内计算出输出。
散列表的冲突(Collision)是指不同的元素映射到了同一个位置上,这时需要解决冲突的方法。常见的解决冲突的方法有以下几种:
- 链接法(Chaining):将散列值相同的元素存储在同一个链表中。
- 开放地址法(Open Addressing):将冲突的元素存储在散列表中的其他位置,例如线性探测、二次探测、双重散列等。
散列表的时间复杂度取决于哈希函数的均匀性和解决冲突的方法。如果哈希函数和解决冲突的方法都很好,散列表的插入、删除和查找操作的时间复杂度可以达到O(1)。
以下是Python实现一个散列表的示例
class HashTable:
def __init__(self):
self.size = 10
self.table = [[] for _ in range(self.size)]
def hash_function(self, key):
return key % self.size
def insert(self, key, value):
hash_value = self.hash_function(key)
for pair in self.table[hash_value]:
if pair[0] == key:
pair[1] = value
return
self.table[hash_value].append([key, value])
def search(self, key):
hash_value = self.hash_function(key)
for pair in self.table[hash_value]:
if pair[0] == key:
return pair[1]
return None
def delete(self, key):
hash_value = self.hash_function(key)
for i, pair in enumerate(self.table[hash_value]):
if pair[0] == key:
del self.table[hash_value][i]
return
这个散列表使用一个列表来存储元素,每个元素是一个键值对,包括键和值。散列表使用一个哈希函数将键映射为散列值,然后将键值对存储在散列表的对应位置上。散列表支持插入元素、查找元素、删除元素等操作,其中插入和查找操作的时间复杂度为O(1)。你可以根据自己的需求对这个示例代码进行修改和扩展。
Python集合操作的时间复杂度
操作 | 时间复杂度 |
---|---|
添加元素 | O(1) |
删除元素 | O(1) |
判断元素是否在集合中 | O(1) |
集合并集 | O(len(s1) + len(s2)) |
集合交集 | O(min(len(s1), len(s2))) |
集合差集 | O(len(s1)) |
集合对称差集 | O(len(s1)) |
Python字典操作的时间复杂度
操作 | 时间复杂度 |
---|---|
获取元素 | O(1) |
添加元素 | O(1) |
删除元素 | O(1) |
遍历字典 | O(n) |