当前位置: 首页 > news >正文

猿创征文|算法刷题——哈希

🏡个人主页 :@ 守夜人st
🚀系列专栏:算法
…持续更新中敬请关注…
🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点

✈️推荐一款模拟面试,刷题,从基础走向大场面试👉 开启你的刷题之路吧

哈希算法

目录

  • 哈希算法
    • 哈希算法简介
    • 牛客刷题

哈希算法简介

散列算法(Hash Algorithm),又称哈希算法杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

Hash 算法能将将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的 Hash 值。

也可以理解为空间映射函数,是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,Hash 函数转换后不可逆,意思是不可能通过逆操作和 Hash 值还原出原始的值。

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。

牛客刷题

1.在哈希法存储中,冲突指的是 ( A )
A.不同关键字值对应到相同的存储地址
B.两个数据元素具有相同序号
C.两个数据元素的关键字值不同,而非关键字值相同
D.数据元素过多
解析
1.哈希函数:
哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表成为哈希表。
基本思想:首先在元素的关键字K和元素的位置P之间建立一个对应关系f,使得P=f(K),其中f成为哈希函数。
创建哈希表时,把关键字K的元素直接存入地址为f(K)的单元;查找关键字K的元素时利用哈希函数计算出该元素的存储位置P=f(K).
创建哈希表时,把关键字K的元素直接存入地址为f(K)的单元;查找关键字K的元素时利用哈希函数计算出该元素的存储位置P=f(K).
2.哈希冲突:
当关键字集合很大时,关键字值不同的元素可能会映像到哈希表的同一地址上,即K1!=K2,但f(K1)=f(K2),这种现象称为hash冲突,实际中冲突是不可避免的,只能通过改进哈希函数的性能来减少冲突。

2.判断下列说法是否正确:设H(x)是一哈希函数,有K个不同的关键字(X1, X2, …Xk)满足H(x1)=H(x2)…=H(Xk),若用线性探测法将这K个关键字存入哈希表中,则至少要探测K-1次。(错误
解析:

当冲突发生时,按照某种方法继续探测基本表中的其他存储单元,直到找到一个空闲位置为止。
一般形式:hi = (h(k)+di)mod m, i = 1,2,3…,k (k<=m-1)
如果di = 1,2,3,…,m-1时称为线性探测。
所以这k个数存入哈希表中至少要探测(1+2+3+…+k-1)= k(k-1)/2

3. HASH 函数冲突处理方式不包括以下哪一项:
A.开放定址法
B.链地址法
C.插入排序法
D.公共溢出区法

HASH 函数冲突处理方式包括:
开放定址法
再哈希法
链地址法
设置公共溢出区法

4. 线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?
A. Map map = new HashMap()
B. Map map = new TreeMap()
C. Map map = new ConcurrentHashMap();
D. Map map = Collections.synchronizedMap(new HashMap());

  1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
  2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加》锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
  3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
    List list = Collections.synchronizedList(new ArrayList());
    Set set = Collections.synchronizedSet(new HashSet());

5. 产生哈希冲突的影响因素有哪些( ABD )
A.装填因子
B.哈希函数
C.哈希表长
D.处理冲突的方法

表长对冲突的影响,是受装填因子制约的。

算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,刷算法最最最直白的原因就是找一个好的工作,那刷题一定是必不可少的
现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网 跳转链接

在这里插入图片描述

感觉不错的话,动手点个赞吧!

相关文章:

  • 基于阿里云 Serverless 快速部署 function 的极致体验
  • docker 如何查看运行中的容器
  • 数学建模十大算法02—插值与拟合(拉格朗日插值、三次样条插值、线性最小二乘法……)
  • 嵌入式Linux入门-异常与中断(流程+寄存器全解析)
  • java计算机毕业设计-体育新闻网站-源码+系统+数据库+lw文档+mybatis+运行部署
  • 基于QT的opencv照片美颜及背景更换
  • [车联网安全自学篇] Android安全之检测APK中异常处理代码是否暴露敏感信息
  • Java基础语法
  • 谷粒商城 renren-fast pom文件报红
  • A40I工控主板(SBC-X40I)LVDS显示屏测试
  • C语言实现环形缓冲区
  • TCP如何确保可靠传输(确认应答,重传机制,滑动窗口,流量控制)
  • Mock.js概述及模块化开发实践(一文足矣)
  • 06 SpringMVC异常处理
  • 风雨秋招路-CV太难了-记得复盘
  • ES6指北【2】—— 箭头函数
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2019.2.20 c++ 知识梳理
  • 78. Subsets
  • Angular4 模板式表单用法以及验证
  • canvas 绘制双线技巧
  • EOS是什么
  • input的行数自动增减
  • Intervention/image 图片处理扩展包的安装和使用
  • Java应用性能调优
  • overflow: hidden IE7无效
  • Python 反序列化安全问题(二)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • win10下安装mysql5.7
  • 多线程 start 和 run 方法到底有什么区别?
  • 那些年我们用过的显示性能指标
  • 排序算法学习笔记
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 系统认识JavaScript正则表达式
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 选择阿里云数据库HBase版十大理由
  • 整理一些计算机基础知识!
  • ${factoryList }后面有空格不影响
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (六)Hibernate的二级缓存
  • (六)vue-router+UI组件库
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .axf 转化 .bin文件 的方法
  • .Net 8.0 新的变化
  • .NET Core 2.1路线图
  • .NET Core 中的路径问题
  • .NET Project Open Day(2011.11.13)
  • .Net Web窗口页属性
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net 无限分类
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表