首页 > 编程语言 >Day13-【软考】长文!什么是散列表查找?以及所有的排序算法是怎样的?如何进行堆排序(重点!)?

Day13-【软考】长文!什么是散列表查找?以及所有的排序算法是怎样的?如何进行堆排序(重点!)?

时间:2025-01-13 23:29:21浏览次数:3  
标签:57 交换 堆排序 元素 软考 真数 长文 排序 节点

文章目录

什么是散列表查找?

是一个全新的查找方式,

  • 和按内容存储类似,具体在哪里,后面再找找…

就是在存储的时候,就想好一定的规则,存到一定的空间中去

那么制定什么样的规则就很重要,不同的规则不同的计算

查找数据时,无需查表,根据规则进行计算即可

在这里插入图片描述

key,就是关键码是多少

h就是最终存储的空间

计算出空间相同怎么办?

比如3,和8,和5模运算,值都是3

两种方式处理

线性探测法

就是3号被占,就顺次往下存即可

伪随机数法

暂未介绍

总之,散列表设计的关键,是减少这种冲突,这样效率才会更高

整体空间大一些,冲突的概率也会低一些

排序有哪些概念?

排序是必考的,有时下午也会考

稳定排序和不稳定排序

在这里插入图片描述

  • 稳定排序,就是经过排序算法处理之后,黑色21仍然在红色21之前

比如总分一样的场景,遇到的这种情况相当之多,但是也会有个先来后到,它背后的含义不太一样,顺序就不能随意变化

  • 不稳定排序,则是反之

内排序和外排序

内排序,是内存中的排序

外排序,会涉及外部存储空间

排序方法有哪些分类?

在这里插入图片描述

  • 直接插入排序,操作简单容易
  • 效率不如希尔排序高
  • 冒泡排序,是基础算法
  • 快速排序,效率会更高,过程复杂些
  • 简单选择排序,考程序算法没什么好考的,太简单了
  • 堆排序的效率是非常高的,建堆过程的有些操作,和之前操作排序二叉树有点类似;删除节点时,要确保仍然是一个堆的形态
  • 归并和基数排序,考察相对少一些

什么是直接插入排序?(稳定)

在这里插入图片描述

插入元素时,从高到低依次找,找到了就插入

排序过程:

  1. 比较前面两个元素,前面的小,就无变化,得到一个有序序列;如果前面的大,就交换即可
  2. 第三个元素,插入这个序列,从高到低依次找,找到了第三个元素刚好大于这个关键字的,就插入这个关键字前面
  3. 第四个元素同理

什么是希尔排序?

属于直接插入排序的一种,但是操作复杂一些

在这里插入图片描述

1、首先d1是5,就是各5个数,形成一个组,每个组只有两个元素,组内进行直接插入排序,因为只有两个元素,所以特别简单,要么不动,要么交换

  • 这第1个5是怎么来的?

    就是总元素个数/2,这里n=10

2、d2,变成3了,也就是间隔变小了,每个组有四个元素了,28,24,96,72,进行直接插入排序,这时候也不太简单吧,24交换,72交换,先这样走

3、d3,变成1了,都是同一个组了,再直接插入排序,要交换几次,19,28,交换,后面的52交换还不行,最后还有个57,这样也很复杂呀

说好处是元素的挪动次数大大减少了,也就是一次次地接近更有序

虽然说19,确实到最后,只需要交换一次了,但是这个57就比较可惜,从最开头,挪到了倒数第二个,交换次数也差不了太多

什么是冒泡排序?(稳定)

相邻元素比较,较小元素组件从底部移动到顶部

  1. 先把数组的最后两个元素对比,后一个小,交换
  2. 继续把52和前一个对比,52小,继续交换
  3. 继续和前一个比,小,交换,到这里52定位完成
  4. 再从最后一个树开始,循环几轮,逐一定位

在这里插入图片描述

什么是快速排序?O(nlog2为底 n为真数)

采用分治法,就是把大问题分解为若干小问题,小问题运用递归的方式来进行

  1. 假设,先定第一个元素为基准,基准在头部,尾部还有一个指针,指向最末端的元素,最末端元素和基准对比,末端元素小,交换;

  2. 指针指向第二个元素,就当成是第二位的元素,还是和基准比较,基准比它小,交换;

  3. 指针又到了倒数第二位,跳来跳去的好复杂…,倒数第二位小,交换;

  4. 总之,大于基准的,都往后交换,小于基准的,都往前交换

  5. 若干轮之后,前面的都小于基准,后面的都大于基准在这里插入图片描述

  6. 前后两个小序列还要再分别进行排序,这也太复杂了…这分治法不太行,一点也不高效

什么是简单选择/直接选择排序?

在这里插入图片描述

  1. 先选出最小的52,和第一个57交换
  2. 剩下的选最小,再交换
  3. 剩下的再选,无需交换了,排序完成
  • 那为啥要一遍遍交换呢,意思就把大的数往后丢呗,每次选最小的往前一个个排不是更明了

什么是堆排序(重点!)?O(nlog2为底 n为真数)

堆的结构,和完全二叉树结构相同,见,Day12-【软考】广义表如何取出表元素?二叉树如何遍历(重点!)?,中:完全二叉树,除了最后一层,上面的都是满的,并且最后一层的左边,都是满的,按照顺序排满了的

k2i,实际上就是ki的左子树节点

k2i+1,就是右子树节点

所有的孩子节点,都小于根结点,就是大顶堆;注意,并且每一个局部的小树,都是这样,都遵循这样的规律!

反之,是小顶堆,根节点比任何其他节点都要小

在这里插入图片描述

比简单的选择排序,有什么优势?

就是这种结构选择最小元素会更高效

如何建堆?

按照完全二叉树的方式来建

  1. 将数组顺次,从第上到下,每一层从左到右,填入元素,形成完全二叉树结构
  2. 从最后一个非非非叶子节点开始(重要的字说三遍),1,3,4,5是非叶子结点,最后一个就是5
  3. 如果建设大顶堆,看5是否大于两个孩子,大则不变,但是目前小,把最大的孩子和根结点交换
  4. 倒数第二个非叶子节点4,开始调,同样最大孩子交换
  5. 倒数第三个非叶子节点3,调整,最大孩子交换,变成8,3,但是此时3的小堆,又不符合了,得变成5,3,这就是倒数第三幅图
  6. 倒数第四个非叶子节点1,调整,最大孩子交换,变成8,1,同样小堆要调,变成7,1,到这里调整完毕,也有点复杂,特别是涉及小堆的调整

在这里插入图片描述

取走堆顶元素后,如何重新调整堆(关键!)?

  1. 顶取走之后,完全二叉树的最后一个节点,放到根的位置

  2. 把目前的根,和两个孩子对比,交换成60,20

  3. 再比较,交换成50,20

  4. 再比较,交换成40,20,完成重建,感觉也很复杂呀…

    这是从本身稀烂的无序中,硬制定规则,编造规律,而规则本身就很复杂

  5. 以上是第一个数取走了,那么新的堆,继续取走,此时又是20变成根,循环一轮,最终所有的数按照顺序取走了…

在这里插入图片描述

堆排序最适合什么场景?

就是N多元素中,无需对所有元素进行排序,只要排出前10,就只求一部分极值,这样用这个结构就最合适

因为它每一轮选出一个,并且是所谓很高效地选出一个

什么是归并排序?(稳定)(n个辅助空间)O(nlog2为底 n为真数)

为了操作简单,通常都是两两归并,也叫做二路合并

  1. 8个元素排序,相邻的两两分组,前两组归并,后两组归并;
  2. 比较57,52,小的52复制到一个小组R中,放在第一个位置k上,k+1,就是下一个位置,i+1,就是指向下一个元素,比较57和59
  3. 再把57复制到k+1中,指标说又指向68,遇到题目再说好了…
  • 第2步,为何是比较57和59了,不是i加了1,j又没动

    不过从道理来说,也确实是应该从57接着开始比

说对有序表进行合并,要比对无序表合并,比较的次数少很多

当问题扩大时,所消耗的时间,不是线性增长,而是几何级数去增长!所以一定要把问题分解得更小!

在这里插入图片描述

什么是基数排序?(稳定)

考得很少

先排个位,再排十位,再排百位

  1. 135,个位是5,放到第5位
  2. 242,192,都是2,192链接在242下面
  3. 把个位排序的结果,进行十位排序,11,排第1位
  4. 242,排第4位
  5. 把十位排序结果,进行百位排序,11,排第0位,剩下的该链接起来的,都链接起来
  6. 最终得到从小到大的结果,就是通过挂链接,来进行排序的!

在这里插入图片描述

排序算法的时间复杂度/空间复杂度/稳定性是怎样的(重点!)?

在这里插入图片描述

同样的关键字,会不会改变顺序, 这就是稳定性

红21和黑21,排序之后,颠倒了位置,就是破坏了稳定性,这就不就是稳定排序的概念

除了选择的之外,越简单的就越稳定呗

辅助空间,绝大部分,都只需要1个,或者说自然个数,只需要1个;注意归并排序,需要n个空间,不合算

时间复杂度,以O(n的2次方)为主,

其次就是O(nlog2为底 n为真数)的情况,基本都是涉及二分,涉及树的,就会出现这种

这归并排序,三个都沾…

标签:57,交换,堆排序,元素,软考,真数,长文,排序,节点
From: https://blog.csdn.net/weixin_48146444/article/details/145123308

相关文章

  • 软考~系统规划与管理师考试——真题篇——2020年11月——综合知识——解析版
    文章目录真题(2020-11-01)真题(2020-11-02)真题(2020-11-03)真题(2020-11-04)真题(2020-11-05)真题(2020-11-06)真题(2020-11-07)真题(2020-11-08)真题(2020-11-09)真题(2020-11-10)真题(2020-11-11)真题(2020-11-12)真题(2020-11-13)真题(2020-11-14)真题(2020-11-15)真题(2020-11-16)真题(2020-11-17)真题......
  • 软考数据库系统1-数据库基本概念
    目录数据库系统概述数据库(DB)的基本特征数据库系统(DBS)数据库管理系统DBMS的功能三级模式-两级映像三级模式两级映像数据库设计流程真题真题1真题2数据模型数据模型相关概念数据模型分类数据模型三要素(☆☆☆☆):E-R图(☆☆☆☆☆)超市管理系统E-R示例图如下:E-R......
  • 软考~系统规划与管理师考试——记忆篇——第七章—— IT 服务持续改进
    文章目录1、IT服务持续改进内容:2、IT服务持续改进的方法过程:3、服务测量关键成功因素4、服务测量测量指标类型:5、服务测量活动6、服务改进活动:7、服务改进成功因素:8、服务回顾活动→与客户回顾的内容1、IT服务持续改进内容:服务测量,服务回顾,服务改进改两回(既然......
  • 提升长文本问答质量:让AI生成真实可信的长篇答案
    人工智能咨询培训老师叶梓转载标明出处RAG通过结合搜索引擎检索的相关信息,显著提升了模型在知识密集型任务中的表现。然而,现有的RAG模型在生成长文本答案时存在两个主要问题:一是生成的答案缺乏事实性(factuality),即生成的内容与检索到的参考信息不完全一致;二是生成的答案逻辑结......
  • Day9-【软考】磁盘的各种读取时间如何计算...?
    六、存储系统什么是层次化存储结构?寄存器,速度最快,效率最高,容量极小,属于最高层Cache,是高速缓存存储器,从上往下,最上面速度最快,最下面容量最大拿掉Cache,也能运行,因为CPU能够直接和内存进行交换,但是这样速度会变慢十倍或者百倍通常K,M为单位为什么会这样,加了Cache就能提升......
  • Day8-【软考】流水线相关技术指标如何计算?
    四、CISC与RISCCISC背景是什么?CISC,是计算机没有大规模通用时,提出来的指令集CISC为何是复杂指令系统?根据不同的用户做不同的指令,所以指令复杂,数量相当多五、流水线技术是提高指令执行的速度和效率的技术为何不使用流水线技术会有大量时间空隙?因为取指,分析,执行,是由......
  • 软考高项论文—成本管理
    成本管理考试频率还是很大的,09年考过一次,17年考过一次,20年考过一次,24年考过一次,成本管理基本算是必背+必备的一个主题论文。下面就是我结合老趙总结的写作模板总结的论文思路:-✅下面简单讲讲思路和论文的大纲 ......
  • 提示词工程(prompt)1:生成长文本时,ai会偷懒的问题
    问题:生成长文本时,ai会偷懒的问题?思考:为什么会偷懒?猜测是因为单次生成token限制,据查chatgpt单次回答最大token限制为4096,为了能在这个限制内完成回答,ai会在后面“偷懒”。注:一个汉字并不等于一个token,如需计算准确数,请自行搜索token计算器答案:分段生成,让ai单次回答数小于单......
  • 软考信安17~网络安全应急响应技术原理与应用
    1、网络安全应急响应概述网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。1.1、网络安全应急响应概念网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。1.2、网络安全应急响应发展国......
  • 万字长文:机器学习的数学基础(易读)
    ❝机器学习的特点是以计算机为工具和平台,以数据为研究对象,以学习方法为中心,是概率论、线性代数、数值计算、信息论、最优化理论和计算机科学等多个领域的交叉学科。❞小编最近冲浪时发现了shunliz整理的各个数学领域的知识点列表,可惜的是只有名称,便结合gpt和网上资料......