首页 > 其他分享 >提速的Hash表

提速的Hash表

时间:2024-08-19 16:16:47浏览次数:11  
标签:场景 hash 函数 提速 插入 查找 Hash

目录


Hash表是一种的数据结构。它是加速算法里最常见的工具。这种数据结构可以提速。

如果说 O (log N )已经很不错了,但你学习 哈希表 这种结构后,你会发现它可以在 O(1)时间内查找数据、O(1)时间内插入数据。这个速度,基本上很难超越了 ,Log N在他面前只能是个弟弟。

学习哈希表的工作原理和适用场景后,你可以在许多地方发挥它的速度优势。如果你要构建高效的软件,Hash是不可避免的。

Hash表的别名

  • Hash
  • Map
  • Hash Map
  • Dictionary
  • Associate Array

The working principle

插入操作

先做一个字母和数字的映射表:
A=1
B=2
C=3
D=4
E=5
......

基于这个字母和数字的映射表,设计一个简单的Hash函数,我们使用求积的方式:
image

现实的hash函数要复杂很多,上面我们只是教学用。

注意:hash函数必须要满足对同样字符串使用hash函数得到的值必须永远相同
image

插入的过程:
image

查找操作

Hash表的查找原理
image

hash表只能单向查找
image

解决键冲突问题

有一个问题,上面的Hash函数,DAB也会转换为8。这里有一个巨大的问题,

另外插入一个问题,hash表,把键存在哪里?
不同语言有不同的设计。....

现在回答一下,baddab两个hash值重复,该怎么解决?

  • 了解拉链法
    image

遍历的时候:
image

Hash的应用场景

  1. 数据本身就是成对的,非常适合用Hash

    • 菜单中的菜品和价格
    • 积分表
    • 候选人和得票数
    • ...
  2. 简化逻辑
    image

  3. 对象的属性
    image

  4. 快速查找场景
    image

  5. 去重场景
    Hash的键有重复项不能存入,达到去重的效果;

标签:场景,hash,函数,提速,插入,查找,Hash
From: https://www.cnblogs.com/mysticbinary/p/18363352

相关文章

  • 030、Vue3+TypeScript基础,路由中History和HashHistory的区别
    01、index.ts路由代码如下://创建路由并暴露出去import{createRouter,createWebHistory}from'vue-router'importHomefrom'@/view/Home.vue'importAboutfrom'@/view/About.vue'importNewsfrom'@/view/News.vue'constrouter=cr......
  • openresty通过lua实现ip地址hash
    实验环境:root@paas-test-ubuntu:/opt/openresty#bin/openresty-Vnginxversion:openresty/1.25.3.2builtbygcc11.4.0(Ubuntu11.4.0-1ubuntu1~22.04)builtwithOpenSSL3.0.215Mar2022TLSSNIsupportenabledconfigurearguments:--prefix=/opt/openresty/n......
  • 利用HashMap制作简单的在线教学系统
    制作一个在线教学系统,通过控制台录入,学生信息要保存到HashMap,有如下功能:1、增加学生信息2、删除学生信息3、修改学生信息4、根据学号查看学生信息5、查看成绩排行榜6、退出系统功能首先创建一个Student类packagehashmap;publicclassStudent{privateStrin......
  • Solution - Atcoder ARC171D Rolling Hash
    对于这个\(\operatorname{hash}(A_L,\cdots,A_R)\),一个比较经典的想法是做差分,即令\(s_i=\sum\limits_{j=1}^iA_jB^{i-j}\)。于是\(\operatorname{hash}(A_L,\cdots,A_R)=s_R-s_{L-1}\timesB^{R-L+1}\not=0\)。那么也就是\(s_R\not=s_{L-1}\ti......
  • ConcurrentHashMap源码阅读
    finalVputVal(Kkey,Vvalue,booleanonlyIfAbsent){if(key==null||value==null)thrownewNullPointerException();inthash=spread(key.hashCode());intbinCount=0;for(Node<K,V>[]tab=table;;){Node<K,V>......
  • HashMap和Hashtable的区别 day15
    /*Map:存储元素的特点是每一个元素是一个键值对{【name:"魏一民"】,【age:18】}Map集合的共同拥有的特点:1、Map集合中的元素,键是唯一的,不会在一个Map集合发现两个相同的键1001:魏一民1002:陈真1001:小虎2......
  • HashMap源码全解析
    1.源码全集如下查看代码 publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable{@java.io.SerialprivatestaticfinallongserialVersionUID=362498820763181265L;staticfinalinthash(O......
  • 分布式知识总结(一致性Hash算法)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/一致性Hash算法假如有三台服务器编号node0、node1、node2,现在有3000万个key,希望可以将这些个key均匀的缓存到三台机......
  • HashSet底层add方法去重例题 day14
    测试类packagecom.shujia.day14;importjava.util.HashSet;/*使用Set集合存储自定义对象,当对象的姓名和年龄都一样的时候,将这两个对象认为是重复了,进行去重HashSet:底层数据结构是哈希表*/publicclassSetDemo2{publicstaticvoidmain(String[]ar......
  • LinkedHashSet day14
    /*LinkedHashSet是继承自HashSet类,底层数据结构是哈希表和双链表,哈希表保证了元素的唯一性,双链表保证了元素的有序Collection:接口-List(元素有序且可以发生重复,且有索引的概念)-ArrayList(底层数据结构是数组,查询快,增删慢,线程......