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

    文章

    3863

    浏览量

    61303
  • 哈希算法
    +关注

    关注

    1

    文章

    56

    浏览量

    10689
收藏 人收藏

    评论

    相关推荐

    QE for AFE嵌入式系统开发的评估工具说明

    电子发烧友网站提供《QE for AFE嵌入式系统开发的评估工具说明.pdf》资料免费下载
    发表于 12-21 10:27 0次下载
    QE for AFE嵌入式<b class='flag-5'>系统开发</b>的评估工具说明

    redis hash底层实现原理

    Redis是一个开源的内存数据库,使用键值对存储数据。其中,Redis中的数据结构之一就是哈希Hash),它提供了一种将多个字段(Field)存储在一个键(Key)中的方法。那么Redis的哈希
    的头像 发表于 12-04 16:27 248次阅读

    嵌入式系统开发资料分享

    电子发烧友网站提供《嵌入式系统开发资料分享.rar》资料免费下载
    发表于 11-10 09:41 0次下载
    嵌入式<b class='flag-5'>系统开发</b>资料分享

    ARM应用系统开发详解——基于S3C4510B的系统设计

    电子发烧友网站提供《ARM应用系统开发详解——基于S3C4510B的系统设计.rar》资料免费下载
    发表于 11-08 15:35 0次下载
    ARM应用<b class='flag-5'>系统开发</b>详解——基于S3C4510B的<b class='flag-5'>系统</b>设计

    HASH算法加密芯片的工作原理及其在STM32 MCU上的应用

    本文主要研究了HASH算法加密芯片的工作原理及其在STM32 MCU上的应用,实现了外部加密芯片对STM32 MCU的程序保护,目前的技术手段无法对其进行破解,其安全性优于其它加密方式。
    的头像 发表于 10-24 15:01 1632次阅读
    <b class='flag-5'>HASH</b><b class='flag-5'>算法</b>加密芯片的工作原理及其在STM32 MCU上的应用

    golang语言的加密解密算法实现

    HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写, 它通过一个标准算法,在计算哈希的过程中,把key混入计算
    发表于 10-12 15:11 899次阅读

    基于网络的嵌入式监控系统开发

    电子发烧友网站提供《基于网络的嵌入式监控系统开发.pdf》资料免费下载
    发表于 10-12 10:30 0次下载
    基于网络的嵌入式监控<b class='flag-5'>系统开发</b>

    基于Rust语言Hash特征的基础用法和进阶用法

    是一种通用的哈希算法,用于将任意类型的数据转换为固定长度的哈希值。下面是一个简单的示例,演示如何使用Hash trait计
    的头像 发表于 09-19 16:02 725次阅读

    hash算法在FPGA中的实现(4)

    在前面的文章中主要介绍了hash表及其链表的结构,以及key值的插入方法,既然有key值的插入,那就有key值的删除,一种删除是CPU通过重新刷新链表来删除,另外一种就是FPGA删除了,这里主要讨论FPGA如何删除链表。
    的头像 发表于 09-07 17:03 389次阅读
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的实现(4)

    hash算法在FPGA中的实现(3)

    在前面的文章中主要介绍了hash表及其链表的结构,同时说明了如何读取表项。那表项是如何写入的了?前期的文章中有少量的提及,这里单独写一篇,介绍两种常见的方案。
    的头像 发表于 09-07 17:02 393次阅读
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的实现(3)

    hash算法在FPGA中的实现(2)

    在前面的文章中:hash算法在FPGA中的实现(一)——hash表的组建,记录了关于hash表的构建,这里记录另外一个话题,就是hash链表
    的头像 发表于 09-07 17:02 405次阅读
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的实现(2)

    hash算法在FPGA中的实现(1)

    在FPGA的设计中,尤其是在通信领域,经常会遇到hash算法的实现。hash算法在FPGA的设计中,它主要包括2个部分,第一个就是如何选择一个好的h
    的头像 发表于 09-07 17:01 581次阅读
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的实现(1)

    STM32助力新产品设计提升安全性

    对称加密算法、AES-ECB模式缺陷与解决办法、Hash哈希函数、Hash哈希算法等。
    发表于 09-05 07:40

    嵌入式Linux系统开发介绍

    Linux 系统开发 基于 linux 操作系统开发我们的产品叫 linux系统开发。此开发的编程方式和裸机
    的头像 发表于 07-27 17:00 831次阅读
    嵌入式Linux<b class='flag-5'>系统开发</b>介绍

    Linux系统开发环境搭建

    今天给大家讲一讲Linux系统开发环境搭建。
    发表于 07-12 14:51 680次阅读
    Linux<b class='flag-5'>系统开发</b>环境搭建