hash
哈希
key->value,借助离散化的思想对数据进行映射,可视为用value代表原本的key

在C++中,可使用map当做哈希表使用,将std::hash
当做哈希函数使用
hash<Typename>name;
size_t value=name(key);
数字哈希
哈希函数的设计
- 方法:直接定址法(a*key+b)、平方取中法(key^2且取中间几位)、除留余数法(key%p,p为质数,数字哈希常用)、随机数法…
- 除留余数法中p为质数的原因:为保证周期不减小
- 常用的p:31、131、1313、1313、13131、131313…(具体问题具体分析)
字符串哈希
- 进制哈希:借用位权展开的思想,将字符串中每一位乘以p进制下的指数(例: a b c d abcd abcd: a ∗ p 3 + b ∗ p 2 + c ∗ p 1 + d ∗ p 0 a*p^3+b*p^2+c*p^1+d*p^0 a∗p3+b∗p2+c∗p1+d∗p0)
- 常用的p:31、131、1313、1313、13131、131313…(具体问题具体分析)
- 技巧:设计unsigned类型,能够实现自动取模
- 应用:判断回文串:顺序哈希=反序哈希
哈希冲突
哈希冲突:两个不同的key映射到一个value上,就出现了哈希冲突。
开散列表(拉链法)
采用邻接表结构,但有可能会使哈希表退化成
O
(
n
)
O(n)
O(n)。当
闭散列表(开放寻址法)
线性探测法、二次探测法、平方探测法…
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具