【408数据结构】散列 (哈希)知识点集合复习考点题目

                                                                            苏泽 

“弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家


  

知识点

1. 散列查找

散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(O(1)),但最坏情况下可能会退化到(O(n))。

也称作哈希表,一种数据结构。
数据元素的关键字与其存储地址直接相关
如果通过散列函数映射到同一个为止,则为 冲突

装填因⼦α = 散列表长度m /表中记录数n

3. 散列函数

散列函数是散列存储的核心,其设计需要考虑关键字的分布情况和冲突概率。

  • 散列查找是典型的"用空间换时间"的算法,只要散列函数设计的合理,散列表越长,冲突的概率越
  • 除留余数法,即H(key) = key % p
  • 直接定址法
    H(key) = a * key + b

    适合关键字分布基本连续的情况,如果关键字不连续,空位太多会造成存储空间的浪费
  • 数字分析法

    选取分布较为均匀的若干位作为散列地址
  • 平方取中法

    取关键字的平方值的几位作为散列地址。

    适合散列地址与关键字的每位都有关系

4. 冲突处理

冲突是散列存储中不可避免的问题。处理冲突的方法主要有开放定址法和链地址法。开放定址法通过在表中寻找空闲位置来解决冲突,而链地址法则通过将具有相同散列地址的元素链接成一个链表来处理冲突。

  • 开放地址法:
    线性探测法

      发生冲突的时候,每次往后探测相邻的下一个单元是否为空

      进行查找的时候,通过散列函数得到Hi并依次比较,如果遇到空则说明查找失败

      删除结点不能简单的将被删结点的空间置为空,否则将阶段在它之后填入散列表的同义词的查找路径,而可以做一个删除标记进行逻辑删除
  • 平方探测法比起线性探测表更不容易产生聚集堆积问题
  • 伪随机序列法
      一个伪随机序列

题目

1. 散列查找的缺点是什么?

解答:
散列查找的缺点主要表现在以下几个方面:

  1. 可能会产生冲突,需要解决冲突的方法。
  2. 冲突处理方法(如链地址法)会增加额外的空间开销。
  3. 在最坏情况下(所有元素都冲突),查找时间复杂度会退化到 (O(n))。

2. 什么是散列存储?

解答:
散列存储是一种数据结构,它根据关键码值(Key Value)直接进行访问。通过Hash函数将要查找的项与表的一个位置关联,以加快查找的速度。它是一种“用空间换时间”的算法,只要散列函数设计的合理,散列表越长,冲突的概率越低。

3. 散列存储适用于什么情况?

解答:
散列存储适用于以下情况:

  1. 数据量大,且查找操作较多。
  2. 可以接受一定程度的冲突。
  3. 需要快速查找、插入和删除操作。

4. 散列查找的时间复杂度与什么有关?

解答:
散列查找的时间复杂度主要与以下因素有关:

  1. 散列表的长度(m):散列表越长,冲突的概率越低。
  2. 冲突概率:冲突越少,查找效率越高。
  3. 散列函数的设计:合理的散列函数可以减少冲突,提高查找效率。

5. 散列函数的设计需要考虑哪些因素?

解答:
散列函数的设计需要考虑以下因素:

  1. 关键字的分布情况:散列函数应该能够将关键字均匀地分布在散列表中,减少冲突。
  2. 冲突概率:设计散列函数时应该尽量减少冲突的概率。
  3. 计算效率:散列函数的计算应该尽可能简单高效,以减少查找和插入的时间。

6. 什么是开放地址法?

解答:
开放地址法是一种处理散列冲突的方法。当发生冲突时,它会选择一个开放的散列地址,将元素存入该地址。开放地址法的实现方式包括线性探测法、二次探测法和双重散列法等。

7. 什么是再散列?

解答:
再散列是一种解决哈希冲突的方法。当发生冲突时,通过一定的计算找到一个新的位置来存储数据。再散列可以提高散列表的查找效率,避免堆积现象。

8. 散列查找的平均查找复杂度是多少?

解答:
散列查找的平均查找复杂度是 (O(1))。这是因为在理想情况下,散列函数可以将关键字均匀地分布在散列表中,每个关键字只需要一次查找就可以找到对应的存储位置。

9. 散列表的空间复杂度是多少?

解答:
散列表的空间复杂度是 (O(n))。为了减少冲突,通常需要设计一个足够长的散列表,其长度与存储的元素数量成正比。

10. 如何解决哈希表中的冲突?

解答:
解决哈希表中的冲突的方法主要包括:

  1. 链地址法:将具有相同散列地址的元素存储在一个链表中。
  2. 开放地址法:当发生冲突时,选择一个开放的散列地址,将元素存入该地址。
  3. 再散列法:通过更换散列函数或调整散列表的大小来减少冲突


另外,利用了工作之余的一点点时间,整理了一套考研408的知识图谱,

我根据这一套知识图谱打造了这样一个408知识图谱问答系统

里面的每一个回答都是根据考研408的考点回复的

目前暂时只接入了微信,如果大家对这个问答系统感兴趣的话可以在我的主页里找到我的微信号

找我拉进测试群免费体验哦


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419220.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小沐学OpenGL】Ubuntu环境下glut的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glut简介1.3 freeglut 2、glut安装2.1 命令安装glut2.2 源码安装glut 3、glut测试3.1 测试1,版本打印3.2 测试2,绘制三角形3.3 测试3,VBO绘制三角形 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一,允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导,帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

构建模块化的FastAPI应用: 从用户认证到角色控制

实现了用户身份验证及角色授权的基本功能。具体来说,当用户尝试访问某些资源时,系统会首先验证用户的身份,然后根据用户的角色来决定是否允许访问特定资源。例如,普通用户只能访问自己的信息,而管理员可以访问额外的管…

UnLua调用C++函数

一、UnLua调用C全局静态函数 1、新建C类MyLuaUtils,继承BlueprintFunctionLibrary,实现全局静态函数GetInt。 MyLuaUtils.h UCLASS() class LUASHOOTING_API UMyLuaUtils : public UBlueprintFunctionLibrary {GENERATED_BODY()UFUNCTION(BlueprintCallable)static…

Python 神器:wxauto 库——解锁微信自动化的无限可能

📝个人主页🌹:誓则盟约 ⏩收录专栏⏪:机器学习 🤡往期回顾🤡:“探索机器学习的多面世界:从理论到应用与未来展望” 🌹🌹期待您的关注 🌹&#x1f…

GPIO 简介(STM32F407)

一、GPIO简介 什么是GPIO GPIO即通用输入输出端口,全称General Purpose Input Output,是控制或者采集外部器件的信息的外设,即负责输入输出。 它按组分配存在,每组最多16个IO口,组数视芯片而定。比如STM32F407ZGT6是…

【Python】Python 读取Excel、DataFrame对比并选出差异数据,重新写入Excel

背景:我在2个系统下载出了两个Excel,现在通过对下载的2个Excel数据,并选出差异数据 从新写入一个新的Excel中 differences_url rC:\Users\LENOVO\Downloads\differences.xlsx; //要生成的差异Excel的位置及名称 df1_url rC:\Users\LENOVO\Dow…

大数据新视界--大数据大厂之Java 与大数据携手:打造高效实时日志分析系统的奥秘

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Spring源码(3)Aware接口、初始化和销毁方法、@Scope、@Primary

1、目标 本文的主要目标是学习Spring源码中Aware接口、初始化和销毁方法、Scope注解、Primary注解的使用 2、Aware接口 Component public class MyBeanAware implements BeanNameAware, ApplicationContextAware {Overridepublic void setBeanName(String name) {System.out…

从JavaScript入门Go三

前情提要 上一章中我们讲了Go中的变量与函数,这一节我们说说Go中的逻辑语法for、if、switch。最近正好有空,正好给大家更新一下入门的第三章。 PS:没看过的第一章、第二章的小伙伴,可以进入下面的链接查看 从JavaScript入门Go一 从…

计算机毕业设计 | vue+springboot在线投稿管理 稿件文章报社管理系统 (附源码)

1,绪论 1.1 行业趋势与需求 随着互联网的发展和普及,越来越多的出版社、杂志社和媒体开始采用在线投稿系统。这种系统提供了一个便捷的平台,让作者可以直接将他们的文章提交到相应的出版机构,而无需邮寄或亲自递交稿件。这不仅节…

Web服务器配置管理

目录 一、设计内容: 二、摘 要 三、课题描述 四、需求分析 五、概要设计 六、详细设计 七、结果分析 八、总结 一、设计内容 Web服务器的安装与配置管理。 1.任务说明 C/S 模式的网络环境,包括一台Windows工作站和一台Windows Server 服务器。 2.要求 ①…

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度:统计以该节点为起始点箭头指向外面的边的条数 入度:统计箭头指向该节点的边数 度为1的节点为悬挂节点,边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…

35天学习小结

距离上次纪念日,已经过去了35天咯 算算也有5周了,在这一个月里,收获的也挺多,在这个过程中认识的大佬也是越来越多了hh 学到的东西,其实也没有很多,这个暑假多多少少还是有遗憾的~ 第一周 学习了一些有…

掌握Java对象本质:从打工者到技术专家的飞跃

1.1 从机器视角到问题视角的演变 在计算机科学的发展历程中,我们见证了从机器视角到问题视角的深刻转变。这一转变不仅体现了编程语言和技术的进步,更反映了我们对问题解决方式理解的深化。 起初,计算机编程主要依赖于机器视角。汇编语言作…

MACD指标精讲PART1:MACD指标入门及使用法则

一、MACD指标入门 MACD(Moving Average Convergence Divergence)指标称为指数平滑异同移动平均线指标,是由Geral Apple所创造,用来跟踪股价运行趋势、判断股票买卖时机的技术分析工具。 MACD指标由DIFF线(Difference线…

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才…

强推!创新直发核心!时序分解+优化组合+模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测

强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测 目录 强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测效果一览基…

如何将图表数据拟合为函数

1. 数据准备 收集图表数据,包括独立变量(如 x值)和因变量(如 y 值)。这些数据可以是离散的点,通常表示为一组 (x1,y1),(x2,y2),…,(xn,yn)。 2. 选择模型 选择拟合函数的模型。这取决于数据的特征及其在…

YOLO配合 PYQT做自定义虚拟电子围-自定义绘制多边形虚拟电子围栏

1、目标检测: YOLO可以识别检测物体,这是众所周知的。使用YOLO来做目标检测,并获取坐标信息。 2、电子围栏 比如在监控中,指定一块区域,如果有目标进入,则发出警报,并提示。比如下图标红的区…