【数据结构强化】应用题打卡

news2024/11/28 5:54:51

应用题打卡

数组的应用

对称矩阵的压缩存储

注意:

1.

2.上三角的行优先存储及下三角的列优先存储与数组的下表对应

上/下三角矩阵的压缩存储

注意:

上/下三角压缩存储是将0元素统一压缩存储,而不是将对角线元素统一压缩存储

三对角矩阵的压缩

栈、队列的应用

栈的定义和基本操作实现

①顺序栈

②链栈

③双向链栈

队列的定义和基本操作实现

①顺序存储的队列:注意队首尾指针进1的公式

②链式存储的队列:注意链式存储的队列出队操作

树的应用

二叉树的性质

知识点:

题目:

1.

2.

二叉树的顺序存储和基本操作

①注意二叉树的顺序存储的定义

②注意二叉树判空

数组下标从1开始存储

数组下标从0开始存储

树的性质

1.树的基本性质

5.1.4

1.

5.4.4

1.

2.

树/森林的定义和画图

①双亲表示法:森林也可以用树的双亲表示法

②孩子表示法

注:

对比:树的孩子表示法存储 v.s. 图的邻接表存储 v.s. 散列表的拉链法 v.s. 基数排序。你发现了什么?

(1)孩子表示法

(2)图的邻接表存储

(3)散列表的拉链法

(4)基数排序

自己动手创造,画一个结点总数不少于10的树/森林,并画出对应的“双亲表示法、孩子表示法、孩子兄弟表示法”三种数据结构的示意图

注意孩子兄弟表示法,是纯链表表示,不像孩子表示法是顺序存储+链式存储

哈夫曼树的应用

并查集的应用

3.5.1~3.5.3 实现并查集的数据结构定义,并实现 Union、Find 两个基本操作

并查操作优化:

3.5.4 设计一个例子,对10个元素 Union

记住Union操作是小树并大树,如果两个集合大小相等,则右边并入左边的树

3.5.5 基于上述例子,进行若干次 Find,并完成“压缩路径”

二叉排序树、平衡二叉树的应用题潜在考法

①计算ASL(注意需要除以结点个数)

②二叉排序树的删除

注意结点z如果只有一棵左子树或右子树,则直接让z的子树称为z父结点的子树,替代z的位置

③自己设计一个例子,给出不少于10个关键字序列,按顺序插入一棵初始为空的平衡二叉树,画出每一次插入后的样子(你设计的例子要涵盖LL、RR、LR、RL四种调整平衡的情况)

例:从一棵初始为空的AVL Trees 开始,依次插入:50、26、10(LL)、3、5(LR)、60、90(RR)、40、55、100、59(RL)

最后插入59

二叉平衡树的插入:

总结:

LL单旋:如果A结点的平衡因子绝对值大于1,就将A结点左子树根结点右旋

RR单旋:如果A结点的平衡因子绝对值大于1,就将A结点右子树根结点左旋

LR单旋:如果A结点的平衡因子绝对值大于1,就将A结点左孩子的右子树根结点先左旋再右旋

RL单旋:如果A结点的平衡因子绝对值大于1,就将A结点右孩子的左子树根结点先右旋再左旋

图的应用

图的性质

1.

2.

3.

4.

5.

图的数据结构定义

①顺序存储和链式存储的图

②带权无向图和带权有向图的邻接矩阵和邻接表表示

图的应用:最小生成树

②prim算法和kruskal算法

图的应用:最短路径

图的应用:拓扑排序

图的应用:关键路径

查找算法

分块查找

折半查找

散列查找

线性再探法

散列表计算,ASL成功的分母是元素总个数,ASL失败的分母是mod的那个数

来自群u的解答:

拉链法

排序算法

希尔排序

堆排序

建堆规则:

自己设计一个长度不小于10的乱序数组,用堆排序,最终要生成升序数组,画出建堆后的状态

假设乱序数组的初始状态如下,元素从0开始存储👇:

若顺序二叉树从数组下标1开始存储结点,则:

● 结点 i 的父结点编号为 i/2

● 结点 i 的左孩子编号为 i*2

● 结点 i 的右孩子编号为 i*2+1

若顺序二叉树从数组下标0开始存储结点,则:

● 结点 i 的父结点编号为 [(i+1)/2] - 1

● 结点 i 的左孩子编号为 [(i+1)*2] - 1 = 2*i + 1

● 结点 i 的右孩子编号为 [(i+1)*2+1] - 1 = 2*i + 2

在本例中,元素从数组下标0开始存储,因此,0号元素是根节点,1号元素是其左孩子,2号元素是其右孩子。其他元素间的关系如下:

由于最终要生成升序数组,因此需要建立大根堆,从最后一个分支(即6号结点)开始调整,即依次调整结点 6、5、4、3、2、1、0。建立好的大根堆如下:

注:如果应用题让你画出一个乱序数组建堆后的样子,只需要画出数组形式的图示即可,不用画二叉树形态的图示。如下👇

 画出每一轮堆排序的状态

快速排序

自己设计一个长度不小于10的乱序数组,用快速排序,最终要生成升序数组

画出每一轮快速排序的状态

基数排序

外部排序

置换选择算法

“外部排序”在历年真题中的考频不算高,因此许多考生并不重视对该考点的复习。但是2023年应用题突然深入考察了“外部排序”,让广大考生感到被偷袭,猝不及防。因此,我们需要重视这个考点。以下是历年真题中,涉及到“外部排序”的题目:

【2016年真题11题】(选择题)考察了“外部排序的思想”

【2019年真题11题】(选择题)考察了“最佳归并树”

【2023年真题42题】(应用题)考察了“置换-选择排序”

【2024年真题11题】(选择题)考察了“败者树”

接下来,我们将2023年真题进行改编,用于回顾外部排序的三个重要考点:①置换-选择排序,②最佳归并树,③败者树

对含有19个记录的文件进行外部排序,其关键字依次是 51, 94, 37, 92, 14, 63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100。假设每个文件记录刚好占一个磁盘块请回答下列问题:

1)若采用置换-选择排序生成初始归并段,工作区中能保存3 个记录可生成几个初始归并段?各是什么?请问置换-选择排序的过程中,读、写磁盘次数分别是几次?

2)若要对几个初始归并段进行3路归并,为实现最佳归并,需要补充的虚段个数是多少?请画出最佳归并树的样子,并计算该归并树的WPL。请问归并过程中,读、写磁盘次数分别是多少次?磁盘I/O次数是多少次?

3)若要对几个初始归并段进行4路归并,为减少归并过程中关键字对比次数,需使用“败者树”。请问构造初始败者树时,需要对比几次关键字?基于构造好的败者树,每次从4个归并段中找到最小关键字所需的关键字对比次数是多少?

1)

排序过程如下表所示:

输出文件FO

工作区WA

输入文件FI

51, 94, 37, 92, 14, 63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

51, 94, 37

92, 14, 63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

37

51, 94, 92

14, 63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

37, 51

14, 94, 92

63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

37, 51, 92

14, 94, 63

15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

37, 51, 92, 94

14, 15, 63

99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

37, 51, 92, 94#

14, 15, 63

99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

14

99, 15, 63

48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100

14, 15

99, 48, 63

56, 23, 60, 31, 17, 43, 8, 90, 166, 100

14, 15, 48

99, 56, 63

23, 60, 31, 17, 43, 8, 90, 166, 100

14, 15, 48, 56

99, 23, 63

60, 31, 17, 43, 8, 90, 166, 100

14, 15, 48, 56, 63

99, 23, 60

31, 17, 43, 8, 90, 166, 100

14, 15, 48, 56, 63, 99

31, 23, 60

17, 43, 8, 90, 166, 100

14, 15, 48, 56, 63, 99#

31, 23, 60

17, 43, 8, 90, 166, 100

23

31, 17, 60

43, 8, 90, 166, 100

23, 31

43, 17, 60

8, 90, 166, 100

23, 31, 43

8, 17, 60

90, 166, 100

23, 31, 43, 60

8, 17, 90

166, 100

23, 31, 43, 60, 90

8, 17, 166

100

23, 31, 43, 60, 90, 166

8, 17, 100

23, 31, 43, 60, 90, 166#

8, 17, 100

8

17, 100

8, 17

100

8, 17, 100

8, 17, 100#

可生成4个归并段,分别是:

37, 51, 92, 94

14, 15, 48, 56, 63, 99

23, 31, 43, 60, 90, 166

8, 17, 100

置换-选择排序的过程中,需要读磁盘19次,写磁盘19次。因为19条文件记录(即上表所示的“输入文件FI”)初始时存储在磁盘,每条记录占一个磁盘块,进行置换-选择排序时,这19条记录需要依次读入内存中(即上表所示的“工作区WA”),再逐一写回外存(即上表所示的“输出文件FO”)。因此,整个过程需要读磁盘19次,写磁盘19次。

最佳归并树练习

2)

回顾“最佳归并树”的构造方法:

本题中,有4个初始归并段,进行3路归并,因此需要构造 3叉最佳归并树。

(初始归并段数量-1) % (k-1) = (4-1)%(3-1)=1≠0,因此需要补充 (k-1)-u = (3-1)-1=1 个虚段。

补充1个虚段后,各初始归并段的长度为:

37, 51, 92, 94——归并段①长度为4

14, 15, 48, 56, 63, 99——归并段②长度为6

23, 31, 43, 60, 90, 166——归并段③长度为6

8, 17, 100——归并段④长度为3

NULL ——归并段⑤为虚段,长度为0

最佳归并树形态如下:

WPL = 树中所有叶节点的带全路径之和 = (0+3+4)*2 + (6+6)*1 = 26

注:最佳归并树形态不唯一,但WPL一定是 26

归并过程中,读磁盘次数=WPL=26次

写磁盘次数=WPL=26次

磁盘I/O总次数=WPL*2=52次。

注:每个记录刚好占一个磁盘块,因此每读一个记录就需要一次读磁盘,每写一个记录就需要一次写磁盘。

在进行第一趟归并时,需要三个归并段中的记录依次读入磁盘、再按归并顺序依次写回磁盘。因此第一趟归并带来了 0+3+4=7 次读磁盘、以及7次写磁盘。

在进行第二趟归并时,需要将三个归并段中的记录依次读入磁盘、再按归并顺序依次写回磁盘,因此第二趟归并带来了 7+6+6 = 19 次读、以及19次写。

综上,经过两趟归并,读磁盘次数 = 7+19=26次,写磁盘次数=7+19=26次。

最佳败者树

3)

本题要求构造4路归并的败者树,因此需要对比关键字 3 次。

注:三次关键字对比如图下所示

首先分别取出4个初始归并段中的最小值,用于构造初始败者树。

第一次关键字对比:将关键字8、37进行对比。37更大,为“失败者”;8更小,为“胜利者”,晋级至下一轮对比。

第二次关键字对比:将关键字14、23进行对比。23更大,为“失败者”;14更小,为“胜利者”,晋级至下一轮对比。

第三次关键字对比:将上一层的两个“胜利者”,即关键字8、14进行对比。14更大,为“失败者”;8更小,为最终“胜利者”,也就找到了最小元素。

基于构造好的败者树,每次从4个归并段中找到最小关键字所需的关键字对比次数是2次。

举个例子,在初始败者树构造完成后,可知4个归并段中,最小元素为8(来自于最左边一个归并段)。

接下来,基于已经构造好的败者树,要继续找到剩余元素中的最小关键字,仅需进行两次关键字对比。

第一次关键字对比:将关键字17、37进行对比。37更大,为“失败者”;17更小,为“胜利者”,晋级至下一轮对比。

第二次关键字对比:将关键字14、17进行对比。17更大,为“失败者”;14更小,为最终“胜利者”,也就找到了最小元素。

注:

咸鱼认为,如果考题中考到败者树,最有可能的三个出题角度是:

①问你败者树的作用

②构造k路归并的败者树时,关键字对比次数是多少?

③基于构造好的败者树,每次从k个归并段中找到最小关键字,至多/至少需要对比关键字多少次?

下面对着三个问题进行总结:

①败者树的作用是:在进行多路归并时,减少关键字对比次数。

构造k路归并的败者树时,需要对比关键字 k-1 次。

例如:构造7路归并的败者树时,需要对比关键字6次。

③基于构造好的败者树,每次从k个归并段中找到最小关键字 所需的关键字对比次数,取决于败者树的高度和形态。万一考到这类问题,可以先画出败者树的形态,再来分析。

k路归并的败者树,形态上是一棵具有 k 个叶子结点的完全二叉树。

例如:7路归并的败者树形态如下

总共有7个叶子结点,每个叶子对应一个归并段。

基于这棵构造好的败者树,从7个归并段中找到最小关键字,最多需要3次关键字对比;最少需要2次关键字对比。

如果本轮新关键字来自于归并段1,则只需要2次关键字对比即可找到7个归并段中的最小关键字。如下所示:

如果本轮新关键字来自于归并段2,则需要3次关键字对比才能找到7个归并段中的最小关键字。如下所示:

至此,应用题打卡结束

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口隔离原则在前端的应用

什么是接口隔离 接口隔离原则(ISP)是面向对象编程中的SOLID原则之一,它专注于设计接口。强调在设计接口时,应该确保一个类不必实现它不需要的方法。换句话说,接口应该尽可能地小,只包含一个类需要的方法&am…

SKD4(note上)

微软提供了图形的界面API&#xff0c;叫GDI 如果你想画某个窗口&#xff0c;你必须拿到此窗口的HDC #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string>/*鼠标消息 * 键盘消息 * Onkeydown * …

实验 3 存储器实验

实验 3 存储器实验 1、实验目的 掌握静态随机存储器 RAM 的工作特性。掌握静态随机存储器 RAM 的读写方法。 2、实验要求 (1)做好实验预习&#xff0c;熟悉MEMORY6116 芯片各引脚的功能和连接方式&#xff0c;熟悉其他实验元器件的功能特性和使用方法&#xff0c;看懂电路图…

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性&#xff0c;通过media type我们可以对不同的设备指定特定的样式&#xff0c;从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强&#xff0c;是CSS 3的重要内容之一。随着移动互联网的发展&#xff0c;m…

中国靠谱热门交友软件app排行榜前十名测评

在信息飞速发展的时代&#xff0c;交友软件层出不穷。究竟哪些才是靠谱又热门的呢&#xff1f;这份交友软件 app 排行榜将为你揭晓&#xff0c;带你走进不同的社交天地&#xff0c;开启精彩交友之旅。 咕哇找搭子小程序&#xff1a;这是一个实名制的找搭子交友平台&#xff0c;…

基于ssm的学生社团管理系统 社团分配系统 社团活动调度平台 学生社团管理 信息化社团管理开发项目 社团活动管理 社团预约系统(源码+文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

时尚科技融合:Spring Boot下的“衣依”服装销售平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

虚拟机三种网络模式详解

在电脑里开一台虚拟机&#xff0c;是再常见不过的操作了。无论是用虚拟机玩只有旧版本系统能运行的游戏&#xff0c;还是用来学习Linux、跑跑应用程序都是很好的。而这其中&#xff0c;虚拟机网络是绝对绕不过去的。本篇文章通俗易懂的介绍了常见的虚拟网络提供的三种网络链接模…

小红书AI配音神器:3秒变声百种风格

小红书AI配音神器&#xff1a;3秒变声百种风格 小红书推出黑科技FireRedTTS&#x1f3a4;&#xff0c;3秒克隆你的声音✨&#xff0c;支持搞怪、温柔等多种风格&#x1f389;&#xff01;只需几秒参考音频&#xff0c;轻松生成个性化语音&#xff0c;短视频配音神器&#x1f3…

把白底照片变蓝色用什么软件免费 批量更换证件照底色怎么弄

作为专业的修图师&#xff0c;有时候也会接手证件照修图和换底色工作&#xff0c;这种情况下&#xff0c;需要换底色的照片也许达到上百张。为了提高工作效率&#xff0c;一般需要批量快速修图&#xff0c;那么使用什么软件工具能够给各式不同的照片批量更换背景色呢&#xff1…

Python并发编程(1)——Python并发编程的几种实现方式

更多精彩内容&#xff0c;请关注同名公众&#xff1a;一点sir&#xff08;alittle-sir&#xff09; Python 并发编程是指在 Python 中编写能够同时执行多个任务的程序。并发编程在任何一门语言当中都是比较难的&#xff0c;因为会涉及各种各样的问题&#xff0c;在Python当中也…

【Unity AI】基于 WebSocket 和 讯飞星火大模型

文章目录 整体AIManagerDialogueManagerUIManagerModelManagerAudioManagerSaveManager 详细部分AIUI动画音频 整体 AIManager 负责配置讯飞的appId&#xff0c;生成鉴权URL&#xff0c;通过WebSocket向服务器请求并返回数据&#xff08;分为最终返回和流式返回&#xff09; …

C++基础(6)——模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.4.1隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型 2.4.2显式实例化&#xff1a;在函数名后的<>中指定模板参数的实际类型 2.5 模板…

C++ WebDriver扩展

概述 WebDriver协议基于HTTP&#xff0c;使用JSON进行数据传输&#xff0c;定义了client与driver之间的通信标准。无论client的实现语言&#xff08;如Java或C#&#xff09;&#xff0c;都能通过协议中的endpoints准确指示driver执行各种操作&#xff0c;覆盖了Selenium的所有功…

Redis入门第五步:Redis持久化

欢迎继续跟随《Redis新手指南&#xff1a;从入门到精通》专栏的步伐&#xff01;在本文中&#xff0c;我们将深入探讨Redis的持久化机制&#xff0c;这是确保数据在服务器重启后不会丢失的关键功能。了解如何配置和使用不同的持久化方法&#xff0c;对于构建可靠的应用程序至关…

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(二)

前言 在上一节中&#xff0c;主要介绍了 Navicat Premium 17 的使用以及创建一个基础的表格。当时只设置了给数据表补充字段&#xff0c;没有设置给数据表删除字段。现在补充一下。 ALTER TABLE student ADD test int(4); 给名为 student 的数据表添加 test 列&#xf…

CI/CD中的自动化测试:在持续集成/持续部署流程中引入网页自动化测试

目录 引言 一、CI/CD流程概述 1.1 什么是CI/CD 1.2 CI/CD流程的主要阶段 1.3 CI/CD的优点 二、自动化测试基础 2.1 自动化测试概述 2.2 自动化测试的作用 2.3 自动化测试的主要类型 三、Web自动化测试工具 3.1 Selenium 3.1.1 Selenium WebDriver常用API 3.1.2 示例…

ChatGPT+R语言助力生态环境数据统计分析!回归与混合效应模型、多元统计分析、结构方程模型(SEM)(lavaan)、Meta分析、贝叶斯回归等

从生态环境领域数据特点及统计方法介绍、GPT入门到GPT辅助R语言基础&#xff1b;数据准备及ggplot 绘图基础&#xff1b;回归和混合效应模型&#xff08;包含方差分析、协方差分析&#xff09;&#xff1b;多元统计分析&#xff08;排序、聚类和分组差异检验&#xff09;&#…

AI 搜索引擎工具集合

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 前言 AI 搜索引擎 前言 在信息爆炸的时代&#xff0c;A 搜索引擎应运而生。它以强大的人工智能技术为支撑&#xff0…

攻防世界--->

做题笔记。 下载 查壳。 64ida打开。 先运行一下程序&#xff1a; 这里可以得到 输入为16个字符。超过会退出。 ida看&#xff1a; 查找字符&#xff1a; 最开始&#xff0c;做的时候&#xff0c;很懵&#xff0c;因为太多函数了。 静下心&#xff0c;只追踪我们需要的函数。…