0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

哈希竞猜游戏系统开发Hash算法

搭建punk2558 来源:搭建punk2558 作者:搭建punk2558 2022-06-21 13:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

哈希表就是一种以键-值(key-indexed)存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。

哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。

使用哈希查找有两个步骤:

1.使用哈希函数将被查找的键转换为数组的索引。在理想的情况下,不同的键会被转换为不同的索引值,但是在有些情况下我们需要处理多个键被哈希到同一个索引值的情况。所以哈希查找的第二个步骤就是处理冲突

2.处理哈希碰撞冲突。有很多处理哈希碰撞冲突的方法,本文后面会介绍拉链法和线性探测法。

哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存。哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。只需要调整哈希函数算法即可在时间和空间上做出取舍。

在Hash表中,记录在表中的位置和其关键字之间存在着一种确定的关系。这样我们就能预先知道所查关键字在表中的位置,从而直接通过下标找到记录。使ASL趋近与0.

1)哈希(Hash)函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可;

2)由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1!=key2,而f(key1)=f(key2)。

3).只能尽量减少冲突而不能完全避免冲突,这是因为通常关键字集合比较大,其元素包括所有可能的关键字,而地址集合的元素仅为哈希表中的地址值

在构造这种特殊的“查找表”时,除了需要选择一个“好”(尽可能少产生冲突)的哈希函数之外;还需要找到一种“处理冲突”的方法。

一.Hash构造函数的方法

1.直接定址法:

直接定址法是以数据元素关键字k本身或它的线性函数作为它的哈希地址,即:H(k)=k或H(k)=a×k+b;(其中a,b为常数)

2.数字分析法:

假设关键字集合中的每个关键字都是由s位数字组成(u1,u2,…,us),分析关键字集中的全体,并从中提取分布均匀的若干位或它们的组合作为地址。

数字分析法是取数据元素关键字中某些取值较均匀的数字位作为哈希地址的方法。即当关键字的位数很多时,可以通过对关键字的各位进行分析,丢掉分布不均匀的位,作为哈希值。它只适合于所有关键字值已知的情况。通过分析分布情况把关键字取值区间转化为一个较小的关键字取值区间。

3.折叠法:

将关键字分割成若干部分,然后取它们的叠加和为哈希地址。两种叠加处理的方法:移位叠加:将分割后的几部分低位对齐相加;边界叠加:从一端沿分割界来回折叠,然后对齐相加。

所谓折叠法是将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位),这方法称为折叠法。这种方法适用于关键字位数较多,而且关键字中每一位上数字分布大致均匀的情况。

折叠法中数位折叠又分为移位叠加和边界叠加两种方法,移位叠加是将分割后是每一部分的最低位对齐,然后相加;边界叠加是从一端向另一端沿分割界来回折叠,然后对齐相加。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4408

    浏览量

    66905
  • 哈希算法
    +关注

    关注

    1

    文章

    56

    浏览量

    11093
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    从小白到大牛:Linux嵌入式系统开发的完整指南

    从小白到大牛:Linux嵌入式系统开发的完整指南 一、小白入门:搭建 Linux 嵌入式开发的认知地基​ 对于零基础学习者,首先要打破 “嵌入式开发高深莫测”的误区。Linux 嵌入式开发
    发表于 12-16 10:42

    瑞芯微 RK3588 平台 Debian 系统开发案例与使用说明

    主频调节等核心内容,还包含 TFTP/NFS 服务搭建与挂载、程序开机自启动等实操指南,为评估板 Debian 系统开发与运维提供完整技术支持。
    的头像 发表于 11-05 14:28 324次阅读
    瑞芯微 RK3588 平台 Debian <b class='flag-5'>系统开发</b>案例与使用说明

    MD5信息摘要算法实现一(基于蜂鸟E203协处理器)

    命名为“Q”,则message_var=Q[(32*i):(32*i+31)]。 4、哈希运算(Hash Operation) 此部分为MD5算法的核心。MD5有4组主循环,每组的主循环需要进行16轮
    发表于 10-30 07:18

    睿擎混合部署方案:基于QT的电机驱动系统开发|技术集结

    一、方案核心概述本方案旨在解决系统开发中“高性能实时控制”与“丰富人机交互”的需求矛盾。它采用混合部署的架构,将系统清晰地分为两个层面:1.实时层:部署在睿擎派设备的RT-Thread实时系统
    的头像 发表于 09-11 18:33 5029次阅读
    睿擎混合部署方案:基于QT的电机驱动<b class='flag-5'>系统开发</b>|技术集结

    明远智睿SSD2351:开启嵌入式系统开发新时代

    在当今科技飞速发展的时代,嵌入式系统已经广泛应用于各个领域,从智能家居到工业自动化,从智能交通到医疗设备,嵌入式系统无处不在。而开发板作为嵌入式系统开发的核心工具,其性能和功能直接影响
    的头像 发表于 07-15 15:47 416次阅读

    明远智睿SSD2351:嵌入式系统开发的卓越之选

    在嵌入式系统开发这一充满挑战与机遇的领域,一款出色的开发板就如同开发者手中的利器,能助力他们披荆斩棘,创造出令人惊叹的成果。明远智睿SSD2351便是这样一款集性能、功能与易用性于一身的杰出代表,正
    的头像 发表于 07-15 15:46 461次阅读

    泰克MSO2024B混合信号示波器在嵌入式系统开发中的应用

    MSO2024B混合信号示波器以其高性能参数、灵活的触发机制和全面的协议解码能力,成为嵌入式系统开发中的理想选择。本文将深入探讨其在嵌入式系统开发中的具体应用及优势。   一、泰克MSO2024B的核心技术特点 泰克MSO2024B示波器具备多项
    的头像 发表于 06-16 15:40 598次阅读
    泰克MSO2024B混合信号示波器在嵌入式<b class='flag-5'>系统开发</b>中的应用

    瑞芯微RK3506 3核A7@1.5GHz+双网口+双CAN-FD 工业开发板—Linux系统开发手册

    本文主要演示Linux系统开发流程。包括LinuxSDK的配置与编译,U-Boot、Kernel及Rootfs开发,以及系统镜像的替换方法,旨在帮助开发者完成
    的头像 发表于 05-20 09:24 1166次阅读
    瑞芯微RK3506 3核A7@1.5GHz+双网口+双CAN-FD 工业<b class='flag-5'>开发</b>板—Linux<b class='flag-5'>系统开发</b>手册

    STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》新书发布!

    近日,由华清远见教育科技集团精心编撰的教育部高等学校电子信息类专业教学指导委员会规划教材、普通高等教育电子信息类专业系列教材——《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》重磅
    的头像 发表于 04-03 14:54 1383次阅读
    STM32<b class='flag-5'>开发</b>入门进阶必备!《STM32嵌入式<b class='flag-5'>系统开发</b>—基于STM32CubeMX和HAL库》新书发布!

    本周三晚7点!《手把手教你做PC》第四课:驱动子系统开发流程上-KHDF

    本周三晚七点,《KaihongOS笔记本电脑开发实战④——驱动子系统开发流程上-KHDF》即将启动!本次课程旨在帮助开发者了解KaihongOS驱动子系统开发流程、理解HDF和KHDF
    的头像 发表于 03-10 17:32 551次阅读
    本周三晚7点!《手把手教你做PC》第四课:驱动子<b class='flag-5'>系统开发</b>流程上-KHDF

    基于步进电机的柴油机EGR系统开发与试验研究

    基于步进电机的柴油机EGR系统开发与试验研究
    发表于 01-09 15:01 0次下载

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】RA4E2使用之SHA256加密解密

    和解密算法来进行解释和说明数据加密和解密操作的。 SHA-256是一种哈希函数,属于SHA-2(Secure Hash Algorithm 2)家族的一部分。它是由美国国家安全局(NSA)设计,并由
    发表于 12-23 18:18

    诊断系统开发咨询服务

    随着汽车电控系统复杂度及消费者对于汽车售后服务水平要求的提升,诊断系统开发在整车开发中的重要度日益突出。经过多年的实践,经纬恒润积累了丰富的经验,业务涵盖诊断协议及功能定义、诊断测试、整车下线配置及检测(EOL)需求设计、整车售
    的头像 发表于 12-18 16:30 979次阅读
    诊断<b class='flag-5'>系统开发</b>咨询服务

    面向教学科研的车载网络系统开发及测试实验室

    车载网络通讯技术是汽车行业的基础技术,是软件定义汽车的基础。网络通信设计与网络测试目的是保证各个ECUs控制器之间一致性和正确性,是整车应用功能得以实现的基础。经纬恒润以量产车型车载网络开发及验证经验为基础,结合教学要求推出向教学科研的车载网络系统开发及测试实验室。
    的头像 发表于 12-18 10:35 1025次阅读
    面向教学科研的车载网络<b class='flag-5'>系统开发</b>及测试实验室

    面向教学科研的车载网络系统开发及测试实验室

    车载网络通讯技术是汽车行业的基础技术,是软件定义汽车的基础。网络通信设计与网络测试目的是保证各个ECUs控制器之间一致性和正确性,是整车应用功能得以实现的基础。 经纬恒润以量产车型车载网络开发及验证经验为基础,结合教学要求推出向教学科研的车载网络系统开发及测试实验室。
    的头像 发表于 12-18 09:50 61次阅读
    面向教学科研的车载网络<b class='flag-5'>系统开发</b>及测试实验室