2-选择题练手

news2024/12/29 10:15:32

1.HASH函数冲突处理方式不包括以下哪一项

A.开放定址法

B.链地址法

C.插入排序法

D.公共溢出区发

:C

HASH函数冲突处理方式有:

  • 开放定址法:(线性探测再散列,二次探测再散列,伪随机探测再散列)线性探测再散列,就是这个值有冲突就依次加1向下一个寻址直到不冲突为止,但效率偏低 ;所以会使用二次探测再散列,就是使用平方的方式等。
  • 再哈希法:就是这个hash函数有冲突,就换一个hash函数试试。
  • 链地址法:(Java hashmap就是这么做的)使用链表处理冲突,只要有冲突就增加一个链表节点。
  • 建立一个公共溢出区:将哈希表分为基本表和溢出表,凡是有冲突的就直接放到溢出区。

插入排序是排序算法的一种,与哈希无关。

2.下设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,c,f,e,a,则栈S的容量至少为

A.6

B.5

C.4

D.3

:D

3.中序遍历二叉排序树可以得到一个从小到大的有序序列。

4.下列选项中,不可能是快速排序第2趟排序结果的是 

A.2,3,5,4,6,7,9

B.2,7,5,6,4,3,9

C.3,2,5,4,7,6,9

D.4,2,3,5,7,6,9

:C

每经过一趟快排,轴点元素都必然就位,也就是说,一趟下来至少有1个元素在其最终位置。

快排的阶段性排序结果的特点是,第i趟完成时,会有i个以上的数出现在它最终将要出现的位置,即它左边的数都比它小,它右边的数都比它大。

题目问第二趟排序的结果,即要找不存在2个这样的数的选项。A选项中2、3、6、7、9均符合,所以A排除;B选项中,2、9均符合,所以B排除;D选项中5、9均符合,所以D选项排除;最后看C选项,只有9一个数符合,所以C不可能是快速排序第二趟的结果。

5.若一棵二叉树具有12个度为2的节点,6个度为1的节点,则度为0的节点个数是

A.11

B.10

C.13

D.不确定

:C

由于N=N0+N1+N2,N=2*N2+N1+1,推出N0=N2+1,即叶子节点个数=度为2结点个数+1。

6.大小为MAX的循环队列中,f为当前队头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为

A.r-f

B.(r-f+MAX+1)%MAX

C.r-f+1

D.(r-f+MAX)%MAX

:B

书上公式:(r-f+MAX)%MAX,r指向队尾元素的下一个位置。

本题公式:(r-f+MAX+1)%MAX,r指向队尾元素的位置。

通常最后一个元素不存东西,方便判断队列空还是满。这题是个例外。

 7.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行几次探测

A.n-1

B.n

C.n+1

D.n(n+1)

E.n(n+1)/2

F.1+n(n+1)/2

:E

问的是至少需要多少次探测,即我们假设在上一次探测的基础上,每进行一次二次探测都能直接找到对应的位置。
第一个:直接找到位置,入坑,1次;
第二个:和第一个同hash,找到的位置被第一个给占了,通过二次探测直接找到下一个,入坑,2次;
第三个:第一个被占了,第二个也被占了,通过二次探测直接找到第三个,入坑,3次;
......
第n个:n次;
一共:(1+n)*n / 2 次

注:二次探测属于开放地址法,开放地址法(除了随机探测)都是(1+n)*n / 2 次。

8.已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,最后的叶子节点为

A.34

B.21

C.16

D.12

:C

将堆画成完全二叉树的形式,堆删除堆顶元素后,是将二叉树最后的叶子节点12放到堆顶,然后将12与其子节点15和10相比较,当15>12时,堆顶12不动,将12与10判断,12>10,不符合小根堆,所以将10和12对调,然后还要将12与其子节点16比较。 所以总共比较3次,最后的叶子节点为16。

 为什么将最后的叶子节点和删除的根节点换?
因为移除根节点后,树就不再是完整的了,数组(这里考虑的是用数组实现堆)中就会有一个空的数据单元,可以把数组中所有的数据都向前移动一个单元,但是这种方法比较慢,所以考虑用最后一个节点填补空的单元,再向下筛选。

9.堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是

A.O(n^2)和O(1)

B.O(nlog(n))和O(1)

C.O(nlog(n))和O(n)

D.O(n^2)和O(n)

:B

:堆排序的时间复杂度为O(nlog(n)),与树结构有关;空间复杂度为O(1),只在原数组上操作。

10.将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为

A.O(N * M * logN)

B.O(N*M)

C.O(N)

D.O(M)

:A

方法1:

1. 在每一个链表中取出第一个值,然后把它们放在一个大小为N的数组里,然后把这个数组当成heap建成小(大)根堆。此步骤的时间复杂度为O(N)。

2. 取出堆中的最小值(也是数组的第一个值), 然后把该最小值所处的链表的下一个值放在数组的第一个位置。如果链表中有一个已经为空(元素已经都被取出),则改变heap的大小。此步骤的时间复杂度为O(lg N)。

3. 不断的重复步骤二,直到所有的链表都为空。

建堆只建一次,复杂度为O(N);调整堆MN-1次,复杂度为(MN-1)*O(lg N)。所以为O(MN*lg N)。

在堆排序中也是一样的,总共n个数,需要得到n个有序的数,那么构建堆需要O(n),重建堆需要(n-1)*O(lgn),所以总共复杂度O(nlgn);如果我只需要前面k个数有序的,那么重构堆需要k*O(lgn),那么总共复杂度就是O(klgn)

方法2:
m*n个数归并排序复杂度是O(m*nlog(m*n)),即O(m*nlogm)+O(m*nlogn). n个m长度的序列已经是有序的了,每个m长度的序列进行归并排序的时间复杂度为O(mlogm),则n个m长度的序列的时间复杂度为n*O(mlogm),前后相减O(m*nlogm)+O(m*nlogn)-n*O(mlogm)=O(m*nlogn)即为答案。
(这里可以看成对n个区间进行归并排序,而每个区间的排序都是独立的)。

方法3:
代入 N=1,不需要排序,凡是非常数的都是错误答案。排除BD
代入 M=1,类似正常排序,NlogN

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

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

相关文章

Netty进阶——粘包与半包(固定分隔符方式解决粘包问题)

目录一、固定分隔符方式解决粘包问题(代码示例)1.1、固定分隔符解决粘包问题的服务端代码示例1.2、固定分隔符方式解决粘包问题的客户端代码示例1.3、分别启动服务端,客户端,查看服务端结果输出一、固定分隔符方式解决粘包问题&am…

vitepress(四):引入vue组件

这节课的内容需要有前置的良好的Vue基础,如果你仅仅想搭建一个存放md文件的网站的话,可以不必学习后面的内容,当然如果你想个性化自己的站点,那么推荐你学习一下引用的方式和注意点,开始你的个性化之旅 编写VUE组件 …

ARES Map地理信息系统(GIS)

ARES Map地理信息系统(GIS) ARES地图是GRAEBERT的地理信息系统(GIS)产品。该软件是一个复合解决方案,它将GIS的知识和内容放在一个CAD丰富的DWG系统上,并允许您同时使用它们。该软件的地图和设计将以DWG格式自然存储,但它们也可以包含GIS信息…

【阶段三】Python机器学习02篇:机器学习项目流程

本篇的思维导图: 机器学习项目流程 大致分为以下6个环节: (1)项目背景(问题定义) (2)数据收集 (3) 数据预处理与探索性数据分析 (4) 特征工程 (5)构建模型:机器学习模型(算法)的选择

TCP 慢启动突发丢包

TCP 慢启动会导致持续突发丢包。 慢启动以 y2xy2^xy2x 增加窗口,在 BDP 已经填满时,后续的慢启动过程如下: ​每一个 ACK 触发 2 个 报文,最终至少丢掉 1 个 BDP 的数据后 sender 才能检测到丢包而退出慢启动并进行重传。 这是…

C语言蓝桥杯刷题:明码

题目链接 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 汉字的字形存在于字库中,即便在今天,16*16 点阵的字库也仍然使用广泛。 16*16 点阵的字库把每个汉字看成是 1616 个像素信息。并把这些信息记…

电子书销售是一种可以躺赚的商业模式么?

文章目录前言电子书销售市场规模到底有多大?电子书产业链电子书阅读平台电子书销售平台国外国内其它销售模式探讨创建电子书创建电子书的工具电子书下载好去处相关法规前言 不知何时,有了网赚一词,例如去各大平台撸羊毛薅羊毛,利…

Vector - VT System - 继电器板卡_VT2820

这块板卡应该是我个人最喜欢的板卡了,虽然说有很多的模拟板卡、数字板卡等仿真板卡,但是在实际的应用中,我们仿真还是很难做到绝对的信号一致,但是如果有实际的硬件,通过继电器板卡就很好的模拟实际车上的场景&#xf…

定时器(Timer)

一、定时器是什么? 定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。 而定时器是指定一个时间去执行一个任务,让程序去代替人工准时操作。 标准库中的定时器: Timer 方法作用void schedule(TimerTask task, long delay)指定dela…

JS数组对象——中文按照首字母排序(分组)sort()、localeCompare()

JS数组对象——中文按照首字母排序(sort 、localeCompare)往期同类文章场景复现根据中文首字母排序1、首字母基础排序2、排序并且分组往期同类文章 文章内容文章链接JS数组对象——根据日期进行排序,按照时间进行升序或降序排序https://blog…

PLC算法系列之数字低通滤波器(离散化方法:双线性变换)

低通滤波器在信号处理专栏有后向欧拉法的详细介绍和源代码,请查看相应的文章,链接如下: PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波…

windows下安装不同版本Python教程

前言 博主也是很长一段时间没有更新文章了吧,因为最近都在忙着升级我的API管理系统,还有准备会考,时隔大概一个月,我带来了本次文章,如何在windows系统下安装多个版本Python,且各版本Python有不同的全局命…

认真学习MySQL中的那些日志文件-二进制日志(binlog)

binlog即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的DDL和DML等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、show等)…

Allegro174版本新功能介绍之关闭拷贝铜皮带网络属性功能

Allegro174版本新功能介绍之关闭拷贝铜皮带网络属性功能 Allegro在172以及以下的版本的时候,拷贝铜皮的时候会自动带上被铜皮的网络属性,在升级到了174版本的时候,是可以随时关闭和打开这个功能的,如下图 除了铜皮,过孔也是可以关闭和打开这个功能的,具体操作如下 选择Se…

NOTE:2022年11月27日以后精密星历采用长命名

IGS切换到新的参考框架—IGS20,以作为其产品的基础。IGS20 与 2022 年 4 月发布的 ITRF2020 密切相关。最新的卫星和地面天线校准 igs20.atx 也将同时生效,与 IGS20 一起使用。IGS 打算从 GPS 第 2238 周(2022 年 11 月 27 日)的产…

一篇分析Linux虚拟化KVM-Qemu分析之timer虚拟化

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 先从操作系统的角度来看一下timer的作用吧: 通过timer的中断,OS实现的功能包括但不局限于上图: 定时…

RootPort的completion timeout为什么不能防止MCE

PCIe split transaction协议在解释completion timeout机制前,我们首先说一下PCIe split transaction协议是什么,以及为什么PCIe要选择split transaction?Split transaction协议是从PCI-X总线的引入的一个重要特性,该传输协议替代了…

微服务 分布式配置中心Apollo详解

微服务 分布式配置中心Apollo详解1. 配置中心概述1.1 配置中心简介1.2 配置中心特点1.3 配置中心对比2. Apollo概述2.1 Apollo简介2.2 Apollo特点3. Apollo设计实现3.1 基础模型3.2 架构设计3.3 Why Eureka3.4 模块说明4. Apollo安装部署4.1 部署说明4.2 环境准备3.3 下载安装包…

JavaScript奇技淫巧:隐形字符

JavaScript奇技淫巧:隐形字符 本文,分享一种奇特的JS编程技巧,功能是:可以使字符串“隐形”、不可见! 效果展示 如下图所示,一个字符串经物别的操作之后,其长度有621字节,但内容却…

[ 数据结构 ] 查找算法--------递归实现

0 前言 查找算法有4种: 线性查找 二分查找/折半查找 插值查找 斐波那契查找 1 线性查找 思路:线性遍历数组元素,与目标值比较,相同则返回下标 /**** param arr 给定数组* param value 目标元素值* return 返回目标元素的下标,没找到返回-1*/public static int search(…