数据结构之Hash Table篇

Hash Table

今天开始刷leetcode的题目,从第一个题开始,做题的时候遇到了用unordered_map<int, int>存储数据的知识点,那么现在就学习总结一下关于散列表的知识,相关网站如下:
TwoSum
那下面切入正题吧~

Hash Table的特性

Hash Table 是一个重要的用于集合的数据结构,TR1引入了以hash table 为基础的容器群,其内的元素没有清晰明确的次序;我们可以把这个container想成一个袋子,这个袋子可以放入元素,也可以取出元素,但是在取出时,我们是以一直随机的次序进行访问元素;基于上述的特性,它相对于(multi)set和(multi)map,没有排序准则(因为它本身就是无序随机的);相比于sequence容器,我们不能把元素放到特定的位置上。
简而言之,它内部的元素是无序的,那它也不会支持关于findMinfindMax及线性时间排序的操作。

散列函数

散列表的大小记为TableSize,通常习惯于让表从0到TableSize-1变化。
每个关键字被映射到从0到TableSize-1这个范围中的某个数,并且被放到适当的单元中,这个映射就叫做散列函数(hash function),数学表达式为:
hash(key) = addr //addr的区间便是0到TableSize-1
接下来主要的内容便是如何选择一个散列函数,决定当两个关键字散列到同一个值的时候(这里叫冲突)应该做什么以及如何确定散列表的大小。
最好的情况是选择TableSize为素数,即保证表的大小为素数,这样尽量使得关键字分配均匀
当key为整数时,则一般合理的方法为直接返回key mod TableSize
当key为字符串时,散列函数需要仔细选择

参考文献:

	《数据结构与算法分析C语言描述 第四版》
	《c++标准库》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑字。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值