数据结构与算法【LeetCode-Offer】:3.1哈希表—哈希表理论基础【存储数据的结构】

哈希表基本理论基础

哈希表的三种形式:

  • 数组(数组就是一个简单的哈希表,对于哈希表中的 key,如果哈希值比较连续且固定,我们可以用数组的下标来等同)
  • HashTable
  • HashSet

场景

在这里插入图片描述

Hash函数

在这里插入图片描述

hash函数的要求

1、一致性

  • 比如将苹果传进去得到的是1,则以后传进去得到的都是1

2、将不同的字符串映射为不同的数值

  • 比如苹果映射为1,香蕉映射为5

Hash函数有什么用?

在这里插入图片描述

  • 将苹果放到数组索引为1的地方,数组存的值2就是苹果的价格。

Hash函数的好处?

  • 比如梨是下标4,当我们找梨的价格的时候就可以直接找索引为4的,查找速度显著提高

Hash Table

  • Hash函数 + 数组 = Hash Table
  • 数组直接映射到内存
  • Hash Table具有额外的逻辑,它使用Hash函数智能的找到存放元素的位置
  • 在一些语言中称为:Map,hashMap…

使用场景

电话本

  • 通过姓名找到电话号码

DNS解析

  • 通过域名来找到我们真正的ip地址

缓存

冲突

在这里插入图片描述

  • 两个k,k1 != k2,但是传入Hash函数里面得到的结果是一样的。

解决冲突

在这里插入图片描述

  • 使用一个链表的结构,数组指定索引首先指向peach,然后peach的地址在指向pear——这样就形成了一个链表

注意
在这里插入图片描述

  • 因为如果找的东西在链表的最后一个,就会很慢——链表要挨个查询慢
    • 解决方法:变成以后将链表换成红黑树

选择Hash函数

在这里插入图片描述

  • Hash Table
    • 平均:就是通过Hash函数可以直接找到对应的值。
    • 最坏:就是Hash Table所有的元素都放到一个位置了,这个位置还使用的是链表。

如何避免冲突

在这里插入图片描述

装载因子:load factor

在这里插入图片描述

  • 解释:上面的hash table一共有6个位置,其中3个位置被占用了。
  • 0.5也就是50%

在这里插入图片描述

选择好的Hash函数

在这里插入图片描述

哈希表底层原理

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狂野小白兔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值