数据结构(一)----散列表

散列表 : 就是把key值通过哈希函数转换为一个整数值 然后把该值通过散列函数的设计方法得到一个值作为数组下标 把value值存储该下标对应的位置
散列函数 :
要求
散列函数计算得到的散列值必须是大于等于 0 的正整数,因为 hash 值需要作为数组的下标
如果 key1key2 ,那么经过 hash 后得到的哈希值也必相同即:hash(key1) hash(key2)
如果 key1 != key2 ,那么经过 hash 后得到的哈希值也必不相同即:hash(key1) != hash(key2)
特点
散列函数计算得出的哈希值尽可能的能随机 并且均匀的分布,这样能够将散列冲突最小化。
散列函数不能太复杂,因为太复杂度势必要消耗很多的时间在计算哈希值上,也会间接影响散列表性能。
散列函数的设计方法 :
直接寻址法 : 通过某个关键字key作为散列地址 但是由于key值不确定 所以一般很少使用该方法
除留余数法 : 例如 : 7对3取余为1 则把1作为数组下标进行查询存储
平方取中法 :
image-20201116172150383


散列冲突 :
当通过散列函数得到的作为下标去查询数组时 发现该位置已经存在数据 此时就会发生散列冲突问题
解决 :
开放寻址法 : 一旦发生散列冲突 就重新寻找一个空的散列地址
线性检测 : 遍历数组挨个查找为空的地址
二次检测 : 类似于线性检测 区别是线性检测是一步一步查找 二次检测是原来的二次方进行查询
双重检测 : 定义多个散列函数 第一个冲突就是要第二个散列函数技术地址值 依次执行
链表法 : 如下图 可以吧数组每个下标位置称为一个 桶 每个桶对应一条链表 把所有散列值相等的元素放到对应的链表中即可
image-20201116173153131

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值