数据结构笔记_哈希表

一. 认识哈希表

  • 将关心的内容转化为一个索引,然后直接用一个数组来存储相应的内容
  • 由于数组是支持随机访问的,所以可以使用O(1)的时间复杂度来执行查找操作
  • 哈希表充分体现了算法设计领域的经典思想:空间换时间
  • 哈希表是时间和空间之间的平衡
  • 对于我们所关心的内容,需要将其转化为一个“索引”,这个转化过程是通过 “哈希函数”完成的

  • 哈希表中的两个关键问题:
  1. 将 “键” 通过通过一个合理的“哈希函数”转化为一个“索引”
  2. “键”比较复杂时,很难保证每个“键”都对应一个不同的索引,这是需要解决的问题就是 “哈希冲突” 问题
  • “哈希函数”的设计是很重要的
  • “键”通过哈希函数得到的“索引”分布越均匀越好

 

二. 哈希函数的设计

      在哈希表中,“哈希函数”的设计是很重要的,一个好的哈希函数可以将“键”所映射出的“索引”分布得很均匀。在一些特殊领域,“哈希函数”的设计是比较复杂的,有专门的设计方式甚至是专门的设计论文。这里,主要关注一般的哈希函数的设计原则。

哈希函数设计原则:

  1. 一致性:如果a==b, 则hash(a) == hash(b);(注意,反过来不成立,即有可能出现:a != b, 但 hash(a) == hash(b), 此时就是所谓的“哈希冲突”问题
  2. 高效性:计算高效便捷
  3. 均匀性:哈希值均匀分布

 

哈希函数一般的通用设计方法:

  • 整型
  1. 对于小范围正整数,直接使用
  2. 对于小范围负整数,进行偏移,转化为正整数
  3. 对于大整数:(1)取模(对10000取模,相当于取大整数的后四位);(2)模一个素数<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值