码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 第七章第三节:散列表(Hash Table)


    文章目录

    • 教程
    • 1. 散列表(Hash Table)
      • 1.1 散列表的基本概念
      • 1.2 散列函数的构造方法
        • 1.2.1 除留佘数法
        • 1.2.2 直接定址法
        • 1.2.3 数字分析法
        • 1.2.4 平方取中法
      • 1.3 处理冲突的方法
        • 1.3.1 拉链法
        • 1.3.2 开放定址法
          • 1.3.2.1 线性探测法(常考)
          • 1.3.2.2 平方探测法
          • 1.3.2.3 伪随机序列法
        • 1.3.3 再散列法
      • 1.4 散列查找及性能分析
        • 1.4.1 查找效率分析(ASL)——线性探测法
      • 总结

    教程

    1. 散列表(Hash Table)https://www.bilibili.com/video/BV1b7411N798/?p=75&share_source=copy_web&vd_source=d228985826b563972268952905224139
    2. 散列表(Hash Table) https://www.bilibili.com/video/BV1b7411N798/?p=76&share_source=copy_web&vd_source=d228985826b563972268952905224139

    1. 散列表(Hash Table)

    1.1 散列表的基本概念

    散列表(Hash Table),又称哈希表。是一种数据结构,特点是︰数据元素的关键字与其存储地址直接相关

    在这里插入图片描述

    在这里插入图片描述


    在这里插入图片描述


    查找成功:

    在这里插入图片描述


    在这里插入图片描述


    查找失败

    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述


    装填因子会直接影响散列表的查找效率

    1.2 散列函数的构造方法

    在构造散列函数时,必须注意以下几点:

    • 散列函数的定义域必须包含全部需要存储的关键字,而值域的范围则依赖于散列表的大小或地址范围。
    • 散列函数计算出来的地址应该能等概率、均匀地分布在整个地址空间中,从而减少冲突
      的发生。
    • 散列函数应尽量简单,能够在较短的时间内计算出任一关键字对应的散列地址。

    下面介绍常用的散列函数。

    1.2.1 除留佘数法

    在这里插入图片描述

    质数又称素数。指除了1和此整数自身外,不能被其他自然数整除的数

    在这里插入图片描述

    以上两个散列函数的p值相同,第二个散列表的13和14基本上就给舍弃了,这样的设计目标――让不同关键字的冲突尽可能地少在这里插入图片描述

    1.2.2 直接定址法

    在这里插入图片描述
    例如:

    在这里插入图片描述

    1.2.3 数字分析法

    数字分析法——选取数码分布较为均匀的若干位作为散列地址.

    设关键字是r进制数(如十进制数),而r个数码在各位上出现的频率不一定相同,可能在某些位上分布均匀一些,每种数码出现的机会均等﹔而在某些位上分布不均匀,只有某几种数码经常出现,此时可选取数码分布较为均匀的若干位作为散列地址。这种方法适合于已知的关键字集合,若更换了关键字,则需要重新构造新的散列函数。

    举例:

    在这里插入图片描述

    1.2.4 平方取中法

    平方取中法――取关键字的平方值的中间几位作为散列地址。
    具体取多少位要视实际情况而定。这种方法得到的散列地址与关键字的每位都有关系,因此使得散列地址分布比较均匀,适用于关键字的每位取值都不够均匀或均小于散列地址所需的位数。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.3 处理冲突的方法

    1.3.1 拉链法

    在这里插入图片描述

    1.3.2 开放定址法

    在这里插入图片描述
    在这里插入图片描述

    1.3.2.1 线性探测法(常考)

    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    查找目标:27

    在这里插入图片描述
    在这里插入图片描述

    查找目标:21

    在这里插入图片描述

    在这里插入图片描述


    在这里插入图片描述

    在这里插入图片描述

    越早遇到空位置,就可以越早确定查找失败
    在这里插入图片描述

    1.3.2.2 平方探测法

    在这里插入图片描述
    平方探测法:比起线性探测法更不易产生“聚集(堆积)”问题

    非重点小坑︰散列表长度m必须是一个可以表示成4j+3的素数,才能探测到所有位置

    1.3.2.3 伪随机序列法

    在这里插入图片描述

    1.3.3 再散列法

    在这里插入图片描述

    1.4 散列查找及性能分析

    1.4.1 查找效率分析(ASL)——线性探测法

    在这里插入图片描述


    在这里插入图片描述
    在这里插入图片描述

    总结

    在这里插入图片描述

  • 相关阅读:
    三菱PLC slmp(mc)协议
    css知识学习系列(10)-每天10个知识点
    DCA培训心得笔记(二)
    SCAU 编译原理 实验1 词法分析实验
    【Java】状态修饰符 final & static
    Pytorch教程
    华为机试真题 Java 实现【最多团队】
    如何辨别优秀的人 选拔出最能打的选手
    JVM原理和优化
    【OpenCV 例程200篇】212. 绘制倾斜的矩形
  • 原文地址:https://blog.csdn.net/qq_56897195/article/details/127780198
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号