《算法图解》第五章散列表学习心得

1、散列函数

散列函数必须满足一些要求:它必须是一致的。 例如, 假设你输入apple时得到的是4, 那么每次输入apple时, 得到的都必须为4。 如果不是这样, 散列表将毫无用处;它应将不同的输入映射到不同的数字。 例如, 如果一个散列函数不管输入是什么都返回1, 它就不是好的散列函数。 最理想的情况是, 将不同的输入映射到不同的数字。

散列函数的特性:散列函数总是将同样的输入映射到相同的索引;散列函数将不同的输入映射到不同的索引;散列函数知道数组有多大, 只返回有效的索引。 如果数组包含5个元素, 散列函数就不会返回无效索引100 

Python中实现散列表:字典。

2、散列表的用途

  • 仿真映射关系;
  • 防止重复;
  • 缓存/记住数据, 以免服务器再通过处理来生成它们。

3、冲突

实际中,散列函数并不是将不同的键映射到数组的不同位置。 

经验:理想的散列函数将键均匀地映射到散列表的不同位置;如果散列表存储的链表很长, 散列表的速度将急剧下降。 然而, 如果使用的散列函数很好 , 这些链表就不会很长!

4、避免冲突

  • 较低的填装因子
  • 良好的散列函数
填装因子=散列表包含的元素数/位置总数。 一个不错的经验规则是: 一旦填装因子大于 0.7 , 就调整散列表的长度。

良好的散列函数让数组中的值呈均匀分布。

5、小结

  • 你可以结合散列函数和数组来创建散列表。
  • 冲突很糟糕, 你应使用可以最大限度减少冲突的散列函数。
  • 散列表的查找、 插入和删除速度都非常快。
  • 散列表适合用于仿真映射关系。
  • 一旦填装因子超过0.7, 就该调整散列表的长度。
  • 散列表可用于缓存数据(例如, 在Web服务器上) 。
  • 散列表非常适合用于防止重复。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值