1.某单CPU系统中有输入和输出设备各1台,现有3个并发执行的作业,每个作业的输入、计算和输出时间均分别为2ms、3ms和4ms,且都按输入、计算和输出的顺序执行,则执行完3个作业需要的时间最少是 。
A.15ms
B.17ms
C.22ms
D.27ms
分析:
按流水线执行时所需时间最短。
流水线计算公式为:1条指令执行时间+(指令条数-1)*流水线周期。
1条指令执行时间是完整的输入+计算+输出时间,也就是2ms+3ms+4ms=9ms
流水线的周期为执行时间最长的一段,也就是4ms
所以按流水线执行后所需的时间为9+(3-1)*4 = 17ms
2.已知两个长度分别为m 和 n 的升序链表,若将它们合并为一个长度为 m+n 的降序链表,则最坏情况下的时间复杂度是( )。
A.O(n)
B.O(m+n)
C.O(min(m ,n))
D.O(max(m,n))
分析:
这道题答案个人觉得应该为D。虽然确实比较次数最多是m+n(实际最多是m+n-1次)。
【先来总结】
最多比较次数,m+n-1
最少比较次数,min(m,n)
(注意时间复杂度和具体的执行次数完全是两码事)
最坏时间复杂度O(max(m,n))
最好时间复杂度O(min(m,n))
分析如下:
1.贡献时间复杂度的不是“移动”次数,而是“比较”,如果从“移动”的角度上考虑,不管是什么情况,它都移动了m+n次。
2.不管是O(m)也好,还是O(n),都是常数项级的时间复杂度,从“级数”的角度考虑,O(m+n),O(min(m,n)),O(max(m,n))都是线性变化的常数项级,这三个的“级数”是一致的。
所以对于楼上的“因为O(m+n)等价于O(max(m, n))”的回答并不是十分认同,个人觉得有点牵强。如果在答案里同时存在O(m+n)和O(max(m,n))该怎么选呢?而另外的一个O(min(m,n))也是常数级线性变化啊。
【刷帖的时候,看有人说王道视频证明了O(max(m,n))等价于O(m+n)】
就是m+n>=max(m,n)并且m+n<=2max(m,n),所以O(m+n)和O(max(m,n))等价,有点夹逼定理的感觉。
如果m=1,n=108时,O(min(m,n))=O(1),O(max(m,n))=O(108),所以O(m+n)和O(min(m,n))不等价。
但是个人觉得这种方法有点为了“解释答案”而去解释,正常人谁能想到还要用夹逼定理去算时间复杂度???
3.所以我觉得直接从本质上考虑就好,这种算法的本质:就是两个表进行比较,其中一个表比较完之后,剩下的直接插入。因此最好的情况,不用想的太复杂,其实就只是短的那个表比较完了:O(min(m,n))。而最坏的情况,就只是长的那个表比较完了:O(max(m,n))。
从编码的角度看,两个有序顺序表合并一个新的有序顺序表中,核心算法如下:
while(i<A.length && j<B.length){ //循环两两比较,小的存入结果
if(A.data[i]<B.data[j])
C.data[k++]=A.data[i++];
else
C.data[k++]=B.data[j++];
}
while(i<A.length) //还剩一个没有比较完的顺序表
C.data[k++]=A.data[i++];
while(j<B.length)
C.data[k++]=B.data[j++];
C.length=k;
3.视图是由下面哪两者导出的表()。
A.模式、关系
B.基本表、视图
C.基本关系、关系
D.内模式、外模式
分析:
视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
4.若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许______个进程参与竞争。
分析:
哲学家就餐问题:当5个进程的时候如果都同时申请到了1台,就发生死锁了。如果是4个进程,那必然有一个能申请到2台。
虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。
1 )互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2 )请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3 )不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4 )环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
因此为了避免发生死锁,则不能生成此资源的环形链,则4个进程是极限了。
5.下面的说法那个正确
#define NUMA 10000000
#define NUMB 1000
int a[NUMA], b[NUMB];
void pa()
{
int i, j;
for(i = 0; i < NUMB; ++i)
for(j = 0; j < NUMA; ++j)
++a[j];
}
void pb()
{
int i, j;
for(i = 0; i < NUMA; ++i)
for(j = 0; j < NUMB; ++j)
++b[j];
}
A.pa 和 pb 运行的一样快
B.pa 比 pb 快
C.pb 比 pa 快
D.无法判断
分析:
测试时pb比pa快,数组a比数组b大很多,可能跨更多的页,缺页率高或者缓存命中更低,所以pb快
6.广域网覆盖的地方范围从几十公里到几千公里,它的通信子网主要使用( ).
A.报文交换技术
B.分组交换技术
C.文件交换技术
D.电路交换技术
分析:
广域网的通信子网主要使用分组交换技术。广域网是由许多交换机组成的,交换机之间采用点到点线路连接,几乎所有的点到点通信方式都可以用来建立广域网,包括租用线路、光纤、微波、卫星信道。如因特网(Internet)是世界范围内最大的广域网。
7.对于一个具有n个顶点的无向图,若采用邻接表表示,则表头向量的大小为_____。
A.n
B.n+1
C.n-1
D.n+边数
分析:
邻接表顶点数就是图的定点数.一个顶点就是一个表头,共有n个顶点,则共有n个表头,即表头向量大小为n
8.外排中使用置换选择排序的目的,是为了增加初始归并段的长度()
分析:
外部排序过程中,为了减少外存读写次数需要减小归并趟数(外部排序的过程中用到归并),外部排序1(其中k为归并路数,n为归并段的个数)。增加k和减小n都可以达到减小归并趟数的目的。置换-选择排序就是一种减小n的、在外部排序中创建初始归并段时用到的算法。它可以让初始归并段的长度增减,从而减小初始归并段的段数(因为总的记录数是一定的)。
9.以下不能在list中添加新元素的方法是()
A.append()
B.add()
C.extend()
D.insert
分析:
- 列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。
- append() 方法向列表的尾部添加一个新的元素。只接受一个参数。
- extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。
- insert() 将一个元素插入到列表中,但其参数有两个(如insert(1,”g”)),第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
选择B选项。
10.某计算机的 Cache 共有 16 块,采用 2 路组相联映射方式,每个主存块大小为 32 字节,按字节编址。主存 129 号单元所在主存块应装入到 Cache 的组号是:
A.0
B.2
C.4
D.6
分析:
Cache共有16块,采用2路组相联,所以一共是8组,从0开始,0 1 2 3 4 5 6 7.主存的某一字块按模8映像到Cache中的任一字块中.比如说主存中第0、8、16 字块是映像到Cache里第0组.现在题目告诉你每个主存块大小32字节,129号单元位于第几块呢?0-31号单元在第0块,32-63号单元在第1块,64-95号单元在第2块,96-127号单元在第3块.由此可见,主存129号单元位于主存中第4块的位置.现在,主存中第4块应该映像到Cache中的第几块呢?答案很明显了吧?4对8取模,自然就是装入Cache中的第4块咯.答案就选C咯~
11.广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。那么广义表E((a,(a,b),((a,b),c)))的长度和深度分别为:
A.2和4
B.1和4
C.1和3
D.2和3
分析:
广义表的长度指:的是广义表中所包含的数据元素的个数
例如,在广义表 {a,{b,c,d}} 中,它包含一个原子和一个子表,因此该广义表的长度为 2。
再比如,广义表 {{a,b,c}} 中只有一个子表 {a,b,c},因此它的长度为 1。
广义表的深度,可以通过观察该表中所包含括号的层数间接得到。这里需要注意,数左括号(或右括号)时同一层次的多个括号只计算一次
比如:广义表 {{1,2},{3,{4,5}}} 中,子表 {1,2} 和 {3,{4,5}} 位于同层,此广义表中包含 3 层括号,因此深度为 3。
用此方法可以看出本题答案选B
12.若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是()。
A.存在,且唯一
B.存在,且不唯一
C.存在,可能不唯一
D.无法确定是否存在
分析:
对角线以下元素均为零,表明只有顶点i到顶点j(i<j)可能有边,而顶点j到顶点i一定没有边,即有向图是一个无环图,因此一定存在拓扑序列。对于拓扑序列是否唯一,试举一例:
设有向图的邻接矩阵,则存在两个拓扑序列,因此该图存在可能不唯一的拓扑序列。
结论:对于任一有向图,如果它的邻接矩阵中对角线以下(或以上)的元素均为零,则存在拓扑序列(可能不唯一)。反正,若图存在拓扑序列,却不一定能满足邻接矩阵中主对角线以下的元素均为零,但是可以通过适当地调整结点编号,使其邻接矩阵满足前述性质。 因此选择c
13.某计算机存储器按字节编址,主存地址空间大小为64MB,现用 4M x 8 位的 RAM 芯片组成 32MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是( )。
A.22 位
B.23 位
C.25 位
D.26 位
分析:
主存地址空间为64MB,64MB=2^26,则需要26位地址。
14.Linux的非root用户,在自己的目录中,不可以删除非空目录dirs的方法是:
A.rm dir dirs
B.rm -r dirs
C.mv dirs /dev/null
D.destroy dirs
分析:
很常用的命令rm -rf /directory -r表示递归删除(文件夹删除) -f表示强制删除 本题只能这么删除文件夹,mv是移动命令,/dev/null就是一个黑洞,移进去的文件就会消失,但非root用户没有执行权限 。
选择A,C,D
15.指令周期是指______。
分析:
指令周期是取出一条指令并执行这条指令的时间。一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
指令周期类型有非访内指令的指令周期、取数指令的指令周期、存数指令的指令周期、空操作指令和转移指令的指令周期。
16.linux系统中某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为:
A.753
B.763
C.754
D.764
分析:
u-g-o:用户-组内用户-其他用户
r-w-x:用4-2-1表示。
组外成员o的权限为只读:r-- = 4
所有者a有全部权限:rwx; = 7
组内g的权限为读与写:rw- = 6
17.CPU 性能受()因素的影响。
分析:
对于CPU而言,影响其性能的指标主要有主频、 CPU的位数以及CPU的缓存指令集。
主频:指的就是时钟频率(也可以对应周期),它直接的决定了CPU的性能。
位数:指的就是处理器能够一次性计算的浮点数的位数,通常情况下,CPU的位数越高,CPU 进行运算时候的速度就会变得越快。处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。
缓存指令集:是存储在CPU内部的,主要指的是能够对CPU的运算进行指导以及优化的硬程序。
18.数据库系统的体系结构是( ) ?
A.两级模式结构和一级映象
B.三级模式结构和一级映象
C.三级模式结构和两级映象
D.三级模式结构和三级映象
分析:
数据库的三级模式结构分为:概念模式,外模式,内模式
概念模式:也称为逻辑模式
是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
是数据库模式结构的中间层
一个数据库只有一个概念模式
外模式:也称为子模式
对应于用户级
一个数据库可以有多个外模式
内模式:也称为存储模式
对应于物理级
是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式
一个数据库只有一个内模式
两级映像:(为了能够在以上三个抽象层次之间的联系和转换,在三级模式之间设计了两层映像)
两层映像保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性。
外模式/模式映像
外模式/模式映像,保证了当模式改变时,外模式不用变(逻辑独立性)
模式/内模式映像
模式/内模式映像,保证了当内模式改变时,模式不用变(物理独立性)
19.ATM 既可以用于广域网,又可以用于局域网,这是因为它的工作原理与 Ethernet 基本上是相同的。( )
错误
正确
分析:
ATM可以用于广域网,也可以用于广域网,一般用于广域网比较多。
ATM的原理是采用面向连接的传输方式,将数据分割成固定长度的信元,通过虚连接进行交换。
ATM的原理和以太网的原理是不一样的。
所以,答案选 错误 。
20.如果子网掩码是255.255.192.0;那么下面哪个IP地址与130.12.127.231处于同一个子网上?
A.130.45.130.1
B.130.22.130.1
C.130.12.64.23
D.130.12.167.127
分析:
255.255.192.0 130.12.127.231 相与得到子网
130.12.64.0
再通过A,B,C,D选项 分别与255.255.192.0相与
排除ABD 选C
21.中序遍历二叉链存储的二叉树时,一般要用堆栈;中序遍历检索二叉树时,也必须使用堆栈()
对
错
分析:
二叉链存储法也叫孩子兄弟法,左指针指向左孩子,右指针指向右兄弟。而中序遍历的顺序是左孩子,根,右孩子。这种遍历顺序与存储结构不同,因此需要堆栈保存中间结果。
而中序遍历检索二叉树时,由于其存储结构跟遍历顺序相符,因此不需要用堆栈。
22.最短CPU执行期优先算法一定是剥夺式的。这个说法是否正确
true
false
分析:
短作业优先(SJF)有两种调度方式
非抢占式(非剥夺式)调度:一旦进程拥有了CPU,只有当该CPU脉冲时间结束才会让出CPU的控制权。
抢占式(剥夺式)调度:当有比当前进程剩余时间片更短的进程到来时,新来的进程抢占当前进程获得CPU运行。这种方式也被称为最短剩余时间优先调度(SRTF)。
23.一棵左右子树不空的二叉树在先序线索化后,其空指针域数为()。
0
1
2
不确定
分析:
二叉树线索化后,先序线索化与后序线索化最多有1个空指针域,而中序线索化最多有2个空指针域
24.CPU对外部设备的控制方式按CPU的介入程度,从小到大依次为07方式、()方式、()方式和( )方式。
A、程序控制方式
B、DMA方式
C、通道方式
D、中断方式
BCAD
ABCD
CBDA
CADB
分析:
依次是C,B,D,A。
CPU对外部设备的控制方式按CPU的介入程度,从小到大依次为通道方式,DMA方式,中断方式,程序控制方式。
DMA方式:Direct Memory Access,也称为直接内存操作。DMA方式在数据传送过程中,没有保存现场、恢复现场之类的工作。
由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。内存地址修改、传送字 个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。
通道方式:与DMA控制方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。与DMA控制方式相比,通道方式所需要的CPU干预更少,而且可以做到一个通道控制多台设备,从而进一步减轻了CPU负担。通道本质上是一个简单的处理器,专门负责输入、输出控制,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作。
中断方式:为了减少程序直接控制方式中CPU等待时间以及提高系统的并行工作程度,用来控制外围设备和内存与CPU之间数据传送称为中断方式。CPU暂时中止现行程序的执行,转去执行为某个随机事态服务的中断处理程序。处理完毕后自动恢复原程序的执行。
程序控制方式:CPU对I/O设备一种控制方法。在这种方式下,利用查询方式进行输入输出,就是CPU通过执行程序查询外设的状态,判断外设是否准备好接收数据或准备好了向CPU输入的数据。根据这种状态,CPU有针对性地为外设的输入输出服务。
综上,依次为C,B,D,A。
本文是牛客网上关于算法和数据结构的错题解析,涉及流水线计算、时间复杂度分析、链表操作、数据库理论、操作系统、网络及存储等多个方面。通过分析各题目,探讨了并发执行的作业最短执行时间、链表合并的时间复杂度、视图的概念、死锁条件以及存储器组织等概念。
&spm=1001.2101.3001.5002&articleId=106879364&d=1&t=3&u=a7bf2d6c56dd4c6cad3a97f37d4e3dd1)
523

被折叠的 条评论
为什么被折叠?



