Hello算法6:哈希表

本文是基于k神的Hello 算法的读书笔记,请支持实体书。

https://www.hello-algo.com/chapter_paperbook/

哈希表

通过建立key与value的映射,实现高效的查找。我们向哈希表输入一个值Key,就能在O(1)的时间内得到值Value。

哈希表的增删改查,时间复杂度否是O(1)

哈希表的常用操作

python 复制代码
# 初始化哈希表
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算法,即

python 复制代码
index = hash(key) % capacity

哈希冲突

上面这个例子,key的值足够大足够多时,就会产生相同的index值,这就是哈希冲突。

一个简单的解决哈希冲突的方法是扩容,但这样效率太低,所以解决哈希冲突遵循以下两个原则:

  1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作
  2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。
相关推荐
Star Patrick几秒前
算法训练(leetcode)二刷第二十八天 | 509. 斐波那契数、70. 爬楼梯、*746. 使用最小花费爬楼梯
算法·leetcode·职场和发展
学术搬运工23 分钟前
【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)
人工智能·深度学习·算法·机器学习·机器人·自动化·自动驾驶
寻找码源44 分钟前
【头歌实训:拆分单链表】
c语言·数据结构·算法·链表
张焚雪1 小时前
关于强化学习的一份介绍
人工智能·学习·算法·机器学习
JhonKI1 小时前
【算法】动态规划中01背包问题解析
算法·动态规划·代理模式
dr李四维1 小时前
深入List集合:ArrayList与LinkedList的底层逻辑与区别
java·数据结构·后端·list
武昌库里写JAVA1 小时前
R语言机器学习与临床预测模型77--机器学习预测常用R语言包
java·开发语言·算法·spring·log4j
旺旺碎冰冰、1 小时前
List、ArrayList与顺序表1
java·开发语言·数据结构·list
YiHanXii1 小时前
Java中 LinkedList<>,ArrayDeque<>的区别 || Queue和Deque的区别
java·算法
做人不要太理性1 小时前
C++:基于红黑树封装map和set
开发语言·数据结构·c++·算法·set·map·红黑树