本文是基于k神的Hello 算法的读书笔记,请支持实体书。
https://www.hello-algo.com/chapter_paperbook/
哈希表
通过建立key与value的映射,实现高效的查找。我们向哈希表输入一个值Key,就能在O(1)的时间内得到值Value。
哈希表的增删改查,时间复杂度否是O(1)
哈希表的常用操作
# 初始化哈希表
hmap: dict = {}
# 添加操作
# 在哈希表中添加键值对 (key, value)
hmap[12836] = "小哈"
hmap[15937] = "小啰"
hmap[16750] = "小算"
hmap[13276] = "小法"
hmap[10583] = "小鸭"
# 查询操作
# 向哈希表输入键 key ,得到值 value
name: str = hmap[15937]
# 删除操作
# 在哈希表中删除键值对 (key, value)
hmap.pop(10583)
哈希表的简单实现
代码略
https://www.hello-algo.com/chapter_hashing/hash_map/#612
这里实际上模拟了一个简单的hash算法,即
index = hash(key) % capacity
哈希冲突
上面这个例子,key的值足够大足够多时,就会产生相同的index值,这就是哈希冲突。
一个简单的解决哈希冲突的方法是扩容,但这样效率太低,所以解决哈希冲突遵循以下两个原则:
- 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。
- 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。