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

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

3天内不再提示

HASH哈希游戏开发(技术方案):开放寻址法详解

開發丨KFZ433 来源:開發丨KFZ433 作者:開發丨KFZ433 2022-06-29 13:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是哈希开放寻址法?

开放寻址法,就是当发生哈希冲突时,重新找到空闲的位置,然后插入元素。寻址方式有多种,常用的有线性寻址、二次方寻址、双重哈希寻址:

​线性寻址​,当需要插入元素的位置被占用时,顺序向后寻址,如果到数组最后也没找到一个空闲位置,则从数组开头寻址,直到找到一个空闲位置插入数据。线性寻址的每次寻址步长是1,寻址公式​​hash(key)+n​​(n是寻址的次数)。 ​二次方寻址​,就是线性寻址的总步长的二次方,即​​hash(key)+n^2​​。 ​双重哈希寻址​,顾名思义就是多次哈希直到找到一个不冲突的哈希值。

pYYBAGK7566APp7lAABex73Fz_M407.png

采用开放寻址法解决哈希冲突,又该如何查找元素和删除元素呢?

查找元素的过程和插入元素类似,用相同的寻址方式,寻址的同时比对key或者value是否相等,相等则认为元素存在,不相等则继续寻址,​如果探测到空闲位置依然没有找到则认为该元素不存在​。

删除有些特别,​不能单纯的把要删除的元素设置为空​,因为在查找元素的过程中探测到的空闲位置是删除元素的位置,就会使得查找元素的寻址算法失效,本来存在的元素误判定为不存在。该如何解决这个问题呢?

​只需要删除元素不是物理删除而是逻辑删除​。给删除的元素做上delete标记,当查询元素寻址时遇到delete标记的位置时不会停下来而是​继续向后探测​,但是在插入元素寻址遇到delete标记的位置就会把应该删除的元素替换掉。

三种寻址方式都有着明显的不足:

线性寻址,寻址的性能虽然元素个数的增多逐步下降,最坏时间复杂度是O(n)。 二次方寻址,寻址的次数比线性寻址较低了,但是会因为步长是二次方,所以需要较长的数组长度,内存利用率可能较低。 双重哈希寻址,多次哈希可能会浪费时间,需要优质的哈希函数做支撑。

而整个开放寻址法的不足也很明显:

插入、查找、删除都需要寻址。 数组中元素越多,空闲位置越少,哈希冲突越剧烈。所以装载因子不能太大,要及时扩容减小冲突,但是数组内存利用率较低。

看似开放寻址法有挺多问题,但是也有一些优点:

数据都存储在数组中,可以有效地利用 CPU 缓存加快查询速度。 而且,这种方法实现的哈希表,序列化也简单,不像链表还要考虑指针。

总结而得,当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是 Java 中​​ThreadLocal​​​内部类​​ThreadLocalMap​​使用开放寻址法解决散列冲突的原因。

审核编辑:符乾江

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

    关注

    3

    文章

    4421

    浏览量

    67822
  • 哈希算法
    +关注

    关注

    1

    文章

    56

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    “校源行”共建计划|开放原子“校源行”(无锡职业技术大学站)成功举办

    高校。 近日,开放原子“校源行”(无锡职业技术大学站)成功举办。活动面向职业院校师生普及开源理念与开源鸿蒙价值,搭建系统化技术认知体系,深化产教融合育人成效,为开源鸿蒙生态储备高素质技术
    发表于 04-15 16:31

    2022全新版!Java分布式架构设计与开发实战(完结)

    历史数据;一致性哈希则在节点增减时最小化数据迁移量,通过虚拟节点技术实现负载均衡,特别适合动态扩展的分布式集群。 全局唯一ID生成是分库分表必须解决的基础问题。传统数据库自增ID在多分片环境下会导致ID冲突
    发表于 03-30 15:20

    SCANSTA111:增强型扫描桥接多分支可寻址IEEE 1149.1(JTAG)端口芯片详解

    SCANSTA111:增强型扫描桥接多分支可寻址IEEE 1149.1(JTAG)端口芯片详解 在电子设备的测试与调试过程中,IEEE 1149.1(JTAG)标准发挥着重要作用。而TI
    的头像 发表于 03-30 11:30 162次阅读

    OPC UA 服务端用户认证的底层逻辑:哈希与加盐应用详解

    摘要在基于UnifiedAutomationSDK开发OPCUA服务端时,用户认证(UserAuthentication)是安全体系的第一道防线。除了传输层的加密通道外,服务端如何安全地存储和验证
    的头像 发表于 01-15 17:29 278次阅读
    OPC UA 服务端用户认证的底层逻辑:<b class='flag-5'>哈希</b>与加盐应用<b class='flag-5'>详解</b>

    探索SN74LVT8996-EP:10位可寻址扫描端口的技术魅力

    探索SN74LVT8996-EP:10位可寻址扫描端口的技术魅力 在电子设备的设计开发中,高效、可靠的测试方案对于确保产品质量和性能至关重要。德州仪器(TI)的SN74LVT8996
    的头像 发表于 12-30 09:35 385次阅读

    2025开放原子开发者大会开源鸿蒙技术分论坛隆重举行

    11月21日,2025开放原子开发者大会开源鸿蒙技术分论坛在北京隆重举行。本次分论坛由开放原子开源基金会主办,开源鸿蒙项目群工作委员会、开鸿智谷联合承办,华为、深开鸿、润开鸿、九联开鸿
    的头像 发表于 11-27 14:41 800次阅读

    2025开放原子开发者大会成功举办

    11月21日,2025开放原子开发者大会在京开幕。大会以“一切为了开发者——AI共智,开源共享”为主题,聚焦人工智能与开源技术的深度融合,全面展现开源生态在推动产业创新、培育新质生产力
    的头像 发表于 11-25 17:19 1021次阅读

    Molex OTS零哈希电缆组件技术解析与应用指南

    Molex现成(OTS)零哈希电缆组件是标准分立式电线电缆组件,设计用于应对电子设备日益缩小的挑战。这些电缆组件提供节省空间的薄型解决方案,具有创新的双点接触特性,有2、4、6和8电路尺寸可供选择
    的头像 发表于 11-17 16:44 881次阅读

    2025开放原子开发者大会量子计算开源技术分论坛即将启幕

    11月22日,2025开放原子开发者大会期间,中国移动将举办以 “量子开源・互联未来” 为主题的量子计算开源技术分论坛。论坛聚焦量子计算基础软件体系构建及国内量子软件生态发展,深度解析量子开源的
    的头像 发表于 11-17 16:34 1132次阅读

    DALI数字照明控制的解决方案

    NDA102 DALI数字照明控制解决方案基于数字照明接口联盟(DiiA)开发的数字可寻址照明接口(DALI)技术。该解决方案包括新唐构建的
    发表于 09-08 06:29

    Redis集群部署配置详解

    Redis集群是一种分布式Redis解决方案,通过数据分片和主从复制实现高可用性和横向扩展。集群将整个数据集分割成16384个哈希槽(hash slots),每个节点负责一部分槽位。
    的头像 发表于 07-17 11:04 1164次阅读

    技术干货 | 精准测试,高效分析——ADC直方图测试技术详解

    本章详解ADC线性度测试的两种核心方法:线性斜坡和正弦波,涵盖DNL/INL计算、测试参数优化及德思特高精度测试方案,助您快速掌握ADC性能评估关键
    的头像 发表于 07-07 10:40 1028次阅读
    <b class='flag-5'>技术</b>干货 | 精准测试,高效分析——ADC直方图测试<b class='flag-5'>技术</b><b class='flag-5'>详解</b>

    关于RK3568核心板可以下载固件成功,但是启动失败,串口打印日志显示:HASH(c): error Invalid DTB hash !

    DTB: rk3568-atk-evb1-mipi-dsi-1080p#_saradc_ch2=341.dtb HASH(c): error Invalid DTB hash ! No find valid DTB, ret=-22
    发表于 07-01 09:42

    鸿蒙5开发宝藏案例分享---一多开发实例(游戏

    十年前藏的现金一样惊喜!)这些藏在文档深处的\"武功秘籍\",能帮我们轻松实现分布式游戏、跨端协同这些听起来很酷的功能。快上车,带你解锁鸿蒙开发的正确姿势! 一、分布式游戏手柄
    发表于 06-03 18:22

    百度地图重磅发布地图AI开放平台

    近日,在WGDC25全球时空智能大会上,百度地图重磅发布地图AI开放平台。百度地图深耕20年的数据能力、引擎能力与AI技术全面开放,向开发者深度开放
    的头像 发表于 05-26 11:26 1985次阅读