amazzzzzing

导航

统计

计算机考研408题集

计算机考研408题集

1 计算机网络

通信基础

  • (2020)QPI总线是一种点对点全工同步串行总线,总线上的设备可同时接收和发送信息,每个方向可同时传输20位信息(16位数据位+4位校验位),每个QPI数据包有80位信息,分2个时钟周期传送,每个时钟周期传送2次。因此QPI总线的带宽位:每秒传送次数 × 2B × 2 。若QPI时钟频率为 2.4GHz,则总线带宽是多少?

    解:直接使用提供的公式,有总线带宽为 2.4G × 2 × 2B × 2 = 19.2GB/s 。
    分析:这里直接提供了公式,降低了难度。有几点注意:
    带宽与全双工、半双工、单工没有关系。带宽表示从一个点到另一个点所能通过的最高数据率。
    全工、半双工、单工与吞吐量有关系。
    直接计算:时钟为 2.4Ghz,每个时钟周期传送2次,每次传送40位,对应4B数据位,故带宽为 2.4G × 2 × 4B = 19.2GB/s 。
    带宽一般为有效带宽,也即是扣除辅助信息之后的有效数据带宽,其描述了信道传送数据的最高速度。速率是发送有效数据的实际速度。
    扩展:奈奎斯特定理:理想低通信道下的极限数据传输速率=2Wlog2V ,其中 W 为理想低通信道的带宽,例如二进制3位表示一个码元,则为 2W×3=6W
    香农定理:信道的极限数据传输率=Wlog2(1+S/N) ,信噪比=10log10(S/N)

  • (2020)假设主机甲采用停止-等待协议向主机乙发送数据帧,数据帧长与确认帧长均为1000B,数据传输速率为10kbps,单向传播时延是200ms,则甲的最大信道利用率为?

    分析:参见计算机网络的性能指标。
    画出传输图,可以得到发送一个帧需要 1000×8/10k=0.8s ,传输需要 0.2s 。收确认帧的过程完全一样,因此有效发送数据耗时 0.8s,但信道占用时间为 2s ,故信道利用率为 40%

协议、接口、服务

  • (2020)下图描述的协议要素是
    图(发送方发送,接收方接收并回应,发送方接收回应并回应)
    a 语法 b 语义 c 时序

    分析:协议由语法、语义、同步三部分组成。语法规定了传输数据的格式;语义规定了所要完成的功能,即需要发出何种控制信息、完成何种动作及作出何种应答;同步规定了执行各种操作的条件、时序关系等,即事件实现顺序的详细说明。

虚电路

  • (2020)下列关于虚电路网络的叙述中,错误的是
    1. 可以确保数据分组传输顺序
    2. 需要为每条虚电路预分配带宽
    3. 建立虚电路时需要进行路由选择
    4. 依据虚电路号进行数据分组转发

    分析:回顾,因特网的核心部分交换方式有三种,电路交换,报文交换,分组交换。在分组交换的基础上,网络层可以实现为面向连接的虚电路方式和无连接的数据报方式。虚电路方式有建立连接的过程,建立连接后取得一个虚电路号,虚电路号关联了一条虚拟通路。由于路径是确定的,因此分组的顺序也是确定的;每个结点都需要维护一个虚电路表,以判断对分组的转发路径,因此需要进行路由选择;虚电路与数据报服务的区别包括,虚电路建立连接后,所有的分组通过分组携带的电路号进行转发,数据报服务的每个分组则需要完整的目的地址。由于虚电路仍然是基于交换的,因此不需要预分配带宽。
    注意:数据报服务和虚电路都是分组交换的方式,其网络层次归于网络层。

CSMA/CD 协议

  • (2019)假设一个采用 CSMA/CD 协议的 100Mbps 局域网,最小帧长是 128B ,则在一个冲突域内两个站点之间的单向传播时延最多是?

    分析:争用期=最小帧的发送时间,即 2τ=128B/100Mbps=1.28×8×106s ,也即有 τ=1.28×4μs=5.12μs

IEEE 802.11 无线网络

  • (2020)某IEEE 802.11 无线局域网中,主机H和AP之间发送或接收CSMA/CA帧的过程如下图所示,在H或AP发送帧前等待的帧间间隔时间(IFS)中,最长的是?

    IFS1
    RTS(H->AP)
    IFS2
    CTS(AP->H)
    IFS3
    DATA(H->AP)
    IFS4
    ACK(AP->H)
    

    分析:RTS:请求发送,CTS:允许发送,两者属于802.11中对于信道预约的协议。CSMA/CA称为载波监听多点接入/碰撞避免,相比CSMA/CD,更强调降低碰撞发生的概率。802.11 协议中,即使发生了碰撞,也要把整个帧发送完毕,因此一旦发生碰撞,这个帧对应的信道资源会被浪费。协议还使用了停止等待协议,每一帧都要进行确认。802.11 规定,所有的站在完成发送之后,必须要等待一段很短的时间才能发送下一帧,这段时间称为帧间间隔IFS。帧间间隔取决于要发送的帧的类型。其中最长的帧间间隔为DIFS,其次为PIFS,最短为SIFS。在使用预约机制时,RTS前使用DIFS,之后使用SIFS,直到结束后经历一个DIFS进入争用期。

  • (2018,35)IEEE 802.11 无线局域网的 MAC 协议 CSMA/CA 进行信道预约的方法是?
    a 发送确认帧
    b 采用二进制指数退避
    c 使用多个 MAC 地址
    d 交换 RTS 与 CTS 帧

    分析:答案为 d 。确认帧属于确认的机制,用于可靠传输。二进制指数退避属于介质访问控制协议的一种冲突处理方法,对于 CSMA/CD 协议,当发生碰撞时,从二进制的离散整数集合(如 0,1,3,7,...,最大值与重试次数有关)取一个数乘以争用期(端到端延时)作为等待时间。 MAC 地址是数据链路层中用于标记地址的字段。

网际层 IP

  • (2019)若将 101.200.16.0/20 划分为 5 个子网,则可能的最小子网的可分配 IP 地址数是?

    分析:考察 CIDR (无分类域间路由选择)地址划分。共 12 个主机位,划分 5 个子网需要消耗 4 个位,因此最小的子网的主机位为 12-4=8 ,即 IP 地址数为 282=1282=254
    注意:对于 CIDR ,路由选择按最长前缀匹配,因此 5 个子网中第一个子网掩码为 12 个主机位全 0。第5 个子网为 12 个主机位前 4 个为 1 。

    0000 0000 0000 (第一个子网的主机地址对应的子网掩码)
    1000 0000 0000
    1100 0000 0000
    1110 0000 0000
    1111 0000 0000
    
  • (2018,38)某路由表中有转发接口相同的 4 条路由表项,其目的网络地址分别为 35.230.32.0/21 ,35.230.40.0/21 ,35.230.48.0/21 和 35.230.56.0/21 ,将该 4 条路由聚合后的目的网络地址为?

    分析:求出所有网络地址的重合部分:
    32/21=0010 0000 & 1111 1000 = 0010 0000
    40/21=0010 1000 & 1111 1000 = 0010 1000
    48/21=0011 0000 & 1111 1000 = 0011 0000
    56/21=0011 1000 & 1111 1000 = 0011 1000
    故取最大公共部分为 0010 0000 & 1110 0000 ,即 35.230.32.0/19

TCP的拥塞控制

  • (2020)若主机甲和主机乙建立一条TCP连接,最大段长(MSS)为1KB,往返时间(RTT)为2ms,则在不出现拥塞的前提下,拥塞窗口从 8KB 增长到 32KB 所需要的最长时间是
    1. 4ms
    2. 8ms
    3. 24ms
    4. 48ms

    分析:这里要注意是最长时间,因此按照线性增大规律进行,总共需要 24RTT=48ms 。
    回顾:发送方维护拥塞窗口,接口方则通知接收窗口。发送窗口取拥塞窗口和接收窗口的最小值。拥塞窗口反映了拥塞程度,接收窗口反映了接收方的接收能力。窗口的单位为报文段长度(MSS),同时也是TCP传送数据的单位。满开始算法:初始拥塞窗口为1,每收到一个确认(即每经过一个RTT),则拥塞窗口翻倍。拥塞避免算法:当拥塞窗口达到门限时,则每次+1。当碰到一次拥堵,则门限取为当前拥塞窗口的一半,同时拥塞窗口重新设置为1。快重传:对应冗余ACK技术,当收到失序报文段时,发送冗余ACK(重复请求要接收的报文段),当接收方连续收到3个冗余ACK时,则直接重传。快恢复:对应快重传,将拥塞窗口和门限同时设置为当前拥塞窗口的一半,然后执行拥塞避免算法。

TCP的序号

  • (2020)若主机甲与主机乙建立TCP连接时,发送的SYN段中的序号是1000,断开连接时,甲发送给乙的FIN段中的序号是5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为?

    分析:注意理解发送方和确认方的序号的意义。
    IP数据报:版本,首部长度(4B),总长度(1B),标识(计数),标志(是否还有分片,允许分片),片偏移(8B),首部校验和,生存时间(TTL,减至0则丢弃。TTL为1则不被转发),协议(如TCP、UDP),源地址,目的地址。
    TCP报文段:IP首部,源端口,目的端口,序号,确认号,数据偏移(首部大小),紧急位,确认位,推送位,复位位,同步位,终止位,窗口,校验和,紧急指针,选项(长度可变)。
    序号:指本报文段发送的数据的第一个字节的序号。
    确认号:至期望收到的下一个报文段的第一个字节的序号(暗示确认号以前的字节已收到)。
    连接:
    SYN,seq=x(A->B)
    ACK,SYN,seq=y,ack=x+1(B->A)
    ACK,seq=x+1,ack=y+1(A->B)
    data trans
    断开:
    FIN,seq=u(A->B)
    ACK,seq=v,ack=u+1(B->A)
    data trans
    FIN,seq=w,ack=u+1(B->A)
    ACK,seq=u+1,ack=w+1(A->B)
    回到题目,连接过程有 SYN 报文段消耗一个序号,断开过程有 FIN 消耗一个序号,之间总共有 5001-1000+1=1002 个序号,因此字节数为 1000。
    注意:连接过程的ACK报文不消耗序号。也即ACK序号为 x+1 ,则下次发送数据的序号还是 x+1 。或者同时携带数据的话,就直接是 x+1 。

  • (2019)若主机甲主动发起一个与主机乙的 TCP 连接,甲、乙选择的初始序号分别为 2018 和 2046 ,则第三次握手 TCP 段的确认序号是?

    分析:注意第三次握手的确认是对第二次握手的确认。因此为 2047 。

应用层,DNS,FTP,SMTP,HTTP

  • (2020)假设网络中的本地域名服务器只提供递归查询服务,其他域名服务器均只提供迭代查询服务;局域网内主机访问Internet上各服务器的往返时间RTT均为10ms,忽略其它各种时延。主机点击超链接 http://www.abc.com/index.html 请求页面 index.html ,从点击链接到收到页面,所需最短时间与最长时间分别是?

    分析:这种题目不要考虑本地缓存(因为本地缓存是有生存期的)。因此最短时间是直接请求本地DNS服务器并获得目的地址,此时总共需要20ms,最长时间是递归查询,本地,根域名,.com,.abc.com 共三级,即总共为 30ms(分级dns) + 10ms(本地dns) + 10ms(请求页面)=50ms 。
    扩展:www万维网,<协议>://<主机地址>:<端口>/<路径>。主机地址可以是域名,如果是域名,则需要进行dns解析。对 www.abc.com ,共三级域名,dns解析过程为:
    1 以域名请求本地域名服务器
    2 本地域名服务器收到请求后,进行迭代查询,先请求根域名服务器(如a.rootservers.net),根域名服务器返回顶级域名服务器dns.com的地址
    3 本地域名服务器向顶级域名服务器dns.com查询,顶级域名服务器返回权限域名服务器dns.abc.com的地址
    4 本地服务器向dns.abc.com查询,dns.abc.com返回www.abc.com的地址。
    5 本地服务器返回域名www.abc.com的地址
    注意:高级别dns服务器只是返回要查询的域名所在的下一级服务器地址,直到域名在域名服务器所在层次。
    根服务器(*)-->顶级服务器(*.com)-->权限服务器(*.abc.com)-->...

  • (2018,33)下列 TCP/IP 应用层协议中,可以使用传输层无连接服务的是?
    a FTP
    b DNS
    c SMTP
    d HTTP

    分析:选 b 。对于 TCP/IP 协议簇,应用层的 DNS 和 DHCP 都是用 UDP 协议。

  • (2018,40)无需转换即可由 SMTP 协议直接传输的内容是?
    a JPEG 图像
    b MPEG 视频
    c EXE 文件
    d ASCII 文本

    分析:SMTP 用于邮件代理向发件人邮件服务器、发件人邮件服务器向收件人邮件服务器传送邮件,SMTP 仅支持传送可打印字符(7 位),要传送其他类型的数据时,需要进行转换,并标记传送的数据类型(MIME)。

NAT

  • 某校园网有两个局域网,通过路由器R1,R2和R3互联后接入Internet,S1和S2为以太网交换机。局域网采用静态IP配置,路由器部分接口以及各主机的IP地址如下图所示。
    R2: 192.168.1.1,203.10.2.2(R1)
    Web服务器:192.168.1.2(R2)
    H1:192.168.1.3(R2)

    R1:203.10.2.1(R2),203.10.2.5(R3)

    R3:203.10.2.6(R1),192.168.1.1
    H2:192.168.1.2(R3)
    H3:192.168.1.3(R3)
    假设NAT转换表结构为:外网(IP,端口),内网(IP,端口)。
    请回答以下问题:
    (1)为使H2和H3能访问Web服务器(使用默认端口号),需要进行什么配置?
    (2)(改动)H2访问Web服务器时,向Web服务器发送IP数据包P,分析P在转发过程中的源IP和目的IP地址变化。

    分析:
    (1)加一个NAT项,即外网(203.10.2.6,80)内网(192.168.1.2,80)
    (2)只有在转发路径中,只有NAT路由器可能修改源IP地址和目的IP地址。初始包,为源(192.168.1.2),目的(203.10.2.2);经过R3转发后,修改源地址,为源(203.10.2.6)目的(203.10.2.2);经过R2转发后,修改目的地址,为源(203.10.2.6)目的(192.168.1.2)。
    注意:NAT只修改一个地址,要么是源地址,要么是目标地址,这是因为包在经过NAT时,要么进入内部网络,要么离开内部网络,进入内部网络则包不知道内部网络的结构,需要修改目标地址,离开内部网络,则外部网络不知道内部网络的结构,需要修改源地址。NAT只记录内部网络和外部网络的映射,因此包进入内部网络时,源地址是外部地址,且源地址不在内部网络中,因此不能修改,目标地址在内部网络,因此可以建立内外映射,需要修改。总结:NAT修改属于内部网络的地址。

2 计算机组成原理

冯诺依曼结构计算机

  • (2018,12)冯·诺伊曼结构计算机中数据采用二进制编码表示,其主要原因是:
    a. 二进制数的运算规则简单
    b. 制造两个稳态的物理器件较容易
    c. 便于用逻辑门电路实现算术运算

    分析:b,c 是正确的,疑问在 a 上。注意计算机的二进制表示实际上是一个工程问题,因为从数学上而言数的不同表示都是等价的。二进制的运算规则简单,是指其相比其它进制而言,在工程上实现起来简单(加法、减法可以统一,相比不需要额外的处理)。这三项实际上是一个标准答案。

总线

  • (2018,21)下列选项中,可以提高同步总线数据传输速率的是
    a. 增加总线宽度
    b. 提高总线工作频率
    c. 支持突发传输
    d. 采用地址/数据线复用

    分析:选 abc 。注意题目隐藏的前提是在其它条件不变的情况下。总线的传输速率直接与总线宽度和总线频率有关。突发传输相当于减少了控制信息(参考文计算机词汇),从而也能提高数据传输速率。地址和数据线复用是从成本的角度说的,在总线宽度不变时,不改变数据传输速率(反而还额外增加了地址数据)。

存储器

  • (2019)假定一台计算机采用3通道存储器总线,配套的内存条型号为 DDR3-1333 ,即内存条所插的存储器总线工作频率为 1333Mhz,总线宽度为 64 位,则存储器总线的总带宽大约是?

    分析:3×1333M×64bit=32GB/s
    扩展:考察总线带宽,参考总线带宽的定义即可(计算机-词汇)。需要注意的是,DRAM可能存在地址线宽度减半的情况(一个地址分两次传送)。

  • (2018,17)假定 DRAM 芯片中存储阵列的行数为 r 、列数为 c ,对于一个 2K×1 位的 DRAM 芯片,为保证其地址引脚数最少,并尽量减少刷新开销,则 r、c 的取指分别是?

    分析:应为 32、64 。
    注意审题,对象为一个存储芯片2K=211=25×26=32×64 。注意地址线和数据线的宽度共同决定芯片的容量(也即一个地址对应一个数据线宽度的数据)。对 DRAM 而言,地址信号分行、列两次传送,即地址线复用(注:现在的动态 RAM 一般为单管动态 RAM)。因此地址线的数目取决于行或列中的较大值,因此行或列的数目应该尽可能接近。
    在教材中,指明 DRAM 的刷新是一行行刷新的,因此应使行适当少。所以行为 32 ,列为 64。

  • (2014)某容量为 256MB 得存储器由若干 4M×8 位的 DRAM 芯片构成,该 DRAM 芯片的地址引脚和数据引脚总数是?

    分析:为 19 。
    CPU 与主存的连接线包括地址线、数据线和控制线。地址线确定了寻址空间,数据线确定了地址对应的数据宽度,控制线传输读写信号。DRAM 芯片阵列将多个 DRAM 芯片组成阵列,是一种扩展内存容量(字扩展)、内存位宽度(位扩展)的方法,其中地址信号被用来作为片选依据。片选线、地址线共同确定一个数据线宽度的数据,并且地址线采用行列复用方式。注意区分地址总线和地址线引脚,地址总线是 CPU 和存储器连接的方式,宽度为一个存储字长,地址线引脚为每个存储芯片的地址线,每个存储芯片同时还接受片选信号和读写信号的控制,位扩展的方法就是使存储芯片的地址宽度和地址总线的地址宽度一致的方法(比如每个存储芯片每个地址只有一位)。
    数据线宽度为 8 位,即数据线引脚为 8 根。共 256/4=64=26 片,总共的地址数为 256M=28×220=228 ,即地址引脚索引范围为 222 ,即地址线引脚为 22/2=11 根。故总共为 11+8=19 根。

  • (2010)假定用若干 2K$\times48K\times$8 位的存储器,则地址 0B1FH 所在芯片的最小地址是?

    分析:为 0800H
    注意十六进制和二进制的转换,10H=0001 0000 B=24
    注意,给定的地址对应的单元为 8 位。两个 4 位芯片通过位扩展的方式并为 8 位,对应 2K 的地址范围,即 2K=211=800H ,4K=1000H ,6K=1800H ,8K=2000H ,因此最小地址为 0800H

  • (2011)某计算机存储器按字节编址,主存地址空间大小为 64MB ,现用 4M×8 位的 RAM 芯片组成 32MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是?

    分析:考察 MAR 的地址含义。对计算机而言,主存的大小是可变的,而 MAR 被设计到 CPU 中,因此 MAR 的宽度应与内存地址空间相对应。寻址 64MB 需要 26 位。

  • (2015)某计算机使用四体交叉编址存储器,假定在存储器上出现的主存地址(十进制)序列为 8005,8006,8007,8008,8001,8002,8003,8004,8000,则可能发生访存冲突的地址对是?

    1. 8004,8008
    2. 8002,8007
    3. 8001,8008
    4. 8000,8004

    分析:四体交叉编址属于多模块存储器,分为低位交叉编址和高位交叉编址。高位交叉编址中连续地址在相同的模块中,因此不能提高访存速度。低位交叉编址中连续的地址在不同的模块中,因此可以通过流水线方式依次启动不同的模块,加速访存速度。当总模块数的对应的传送周期之和不小于每个模块的存取周期,则能实现连续流水线。将地址模 4 得 1,2,3,0,1,2,3,0,0 ,因此冲突。这里冲突是流水线的概念。影响流水线性能的因素包括数据冲突(数据冒险)、控制冲突(控制冒险),前者为数据依赖,后者为地址依赖。冲突的含义是按照正常流水线可能引起错误的情况。这里连续访问两次相同的模块,时间间隔过短(短于存取间隔),引起风险。

  • (2017)某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH ,则读取 x 需要的存储周期是?

    分析:使用低位交叉编址来加速。每次 32 位,因此即为 4 体低位交叉编址。对流水线而言,最开始一个字节需要一个周期,后续每个字节需要 1/4 个周期,即总的周期为 1+7/4 ,即需要 3 个存取周期。

地址翻译

  • (2020)假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式,直写(Write Through)写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB。开始时Cache为空。请回答以下问题。
    (1)Cache每一行中标记(tag)、LRU位各占几位?是否有修改位?
    (2)有如下C语言片段:

    for (k=0;k<1024;k++>)
    s[k]=2*s[k];
    

    若数组s与变量k均为int型,int型数据占4B,变量k分配在寄存器中,数组s在主存中的起始地址位0080 00C0H,则该段程序段执行过程中,访问数组s的数据Cache缺失次数为多少?
    (3)若CPU最开始的访问操作是读取主存单元0001 0003H中的指令,简要说明从Cache中访问该指令的过程,包括Cache缺失处理过程。

    分析:
    (1)块大小为 64B,则块内地址有 6 位。
    8路组相联映射,即每组8个项。Cache共可存储 32KB/64B=25210/26=29 个块。即共有 29/8=26 个组,即组地址有 6 位。
    即标记位有 32-6-6=20 位。LRU 用来标记组内全相联映射的优先级,因为一共有8个,因此LRU需要3位。
    修改位用来标记块换出时是否需要写回,由于采用直写法(修改后立即写回),因此不需要修改位。
    (2)块内地址为6位,因此起始位置对应为整数块。每一块有64B,对应一次换入cache,因此每16个数,缺失一次,故总的缺失次数为1024/16=64次。
    (3)计算可得00010003H的块内地址为3H,组地址为0H,因此处理过程为:从内存中取出内容;同时将内存对应的块装入Cache中的0H组内某一行,将高20位记入tag位,并修改相应的LRU位,设置有效位。
    扩展:对于读操作,若不命中,则从内存中取内容,同时更新Cache。对于写操作,则有写回和不写回两种方法。

  • (2020)某32位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为4字节,虚拟地址结构为 页目录号(10位)+页号(10位)+页内偏移量(12位)。某C程序中数组a[1024][1024]的起始虚拟地址为1080 0000H,数组元素占4字节,该程序运行时,其进程的页目录起始物理地址为0020 1000H,请回答下列问题。
    (1)数组元素a[1][2]的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址是什么?若该目录项中存放的页框号为00301H,则a[1][2]所在页对应的页表项的物理地址是什么?
    (2)数组a在虚拟地址空间中所占区域是否必须连续?在物理地址空间中所占区域是否必须连续?
    (3)已知数组a按行优先方式存放,若对数组a进行按行遍历和按列遍历,则哪一种遍历方式的局部性更好?

    分析:
    (1)虚拟地址是 10800000H+(1024+2)×4=10800000H+212+23=10800000H+1000H+8H=10801008H 。转换为二进制为 0001 0000 1000 0000 0001 0000 0000 1000 。故页目录号为 042H ,页号为 001H 。页目录项的物理地址为 00201000H+(042H)×4=00201108H 。页框号表示一级页表所在地址,即为 00301000H ,考虑页号为 001H ,每个页表项4B,故对应的页表项的物理地址为 00301000H+4=00301004H
    (2)一页大小为 212B ,数组a的大小为 220×4B ,故数组a必然存放与多个页,因此虚拟地址必须联系,物理地址不需要连续。
    (3)按行遍历时,相当于虚拟地址连续遍历,因此元素处于同一页面的可能性很大,因此局部性更好。
    :对于二级页表,要注意区分名字。如果记页目录表为二级页表,页号表为一级页表,则有页目录项是二级页表的表项,页表项是一级页表的表项。如果不区分清楚,就没法正确理解问的问题了。

数的表示

  • (2020)有实现 x×y 的两个C语言函数如下:

    unsigned umul(unsigned x, unsigned y) {return x*y;}
    int imul(int x, int y) {return x*y;}
    

    假定某计算机M中的ALU只能进行加减运算和逻辑运算。请回答下列问题。
    (1)若M的指令系统没有乘法指令,但有加法、减法和位移等指令,则在M上也能实现上述两个函数中的乘法运算,为什么?
    (2)若M的指令系统中有乘法指令,则基于ALU、位移器、寄存器以及相应的控制逻辑实现乘法指令时,控制逻辑的作用是什么?
    (3)针对以下三中情况:a)没有乘法指令;b)有使用ALU和位移器实现的乘法指令;c)有使用阵列乘法器实现的乘法指令,函数umul()在哪种情况下执行时间最长?哪种情况下执行的时间最短?说明理由。
    (4)略。

    扩展:在计算机中,乘法运算可以由累加和左移(对原码小数是右移)操作实现。
    原码一位乘法:符号位分开运算,取绝对值参加乘法运算。每次运算一位,并加到部分积,然后左移一位。最后赋符号位,符号位通过异或运算得到(符号相同,结果为0,符号不同,结果为1)。
    补码的乘法运算方法类似。
    如果有乘法指令,则需要ALU执行该指令时控制移位、部分积加法以及循环次数。
    如果没有乘法指令,则编译时乘法指令可以被编译为一个乘法子函数,执行一个循环移位相加的过程。显然没有乘法指令意味着一次乘法对应多条指令的执行,速度最慢,有乘法指令但通过ALU和位移器执行乘法指令时需要较多的执行时间,相比阵列乘法器专用硬件执行速度更慢。

  • (2018,14)IEEE 754 单精度浮点格式表示的数中,最小的规格化正数是?
    a 1.0×2126
    b 1.0×2127
    c 1.0×2128
    d 1.0×2149

    分析:注意浮点数的 IEEE 754 标准中,浮点数由数符、阶码、尾数组成。32bit浮点数即为 1+8+23 的形式。阶码用移码表示指数,尾数用小数形式表示小数,且隐含一个默认的 1。阶码的全 0 和 全 1 表示无穷小(合法)和溢出(不合法),且阶码的移码表示全零对应十进制的 -127 ,全 1 对应十进制的 128,因此最小正数为 a 。相应的,最大的正数为 (2223)×2127

  • (2017) 已知 f(n)=i=0n2i=2n+11=11...1n+1位B ,计算 f(n) 的C语言函数如下:

    int f1(unsigned n) {
      int sum = 1, power = 1;
      for (unsigned i = 0; i <= n-1; i++) {
        power *= 2;
        sum += power;
      }
      return sum;
    }
    

    (1)当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的变量 i 和 n 都定义为 int 型,f1 是否还会出现死循环?为什么?

    分析:
    其实考察了C语言中立即数的变量类型,也即变量运算时类型的转换。有以下结论:
    两个变量运算,总是转换为同一类型后进行运算。转换按照适度精确的原则进行(可以参考不同类型数据转换规则)。
    第一问。当 n=0 时,n-1 表示最大的无符号整型数,因此无符号型数 i <= n-1 永远成立。当定义为 int 型时,n-1 = -1,当 i >= 0时,循环结束,即不会出现死循环。

机器字长

  • (2020)下列给出的部件中,其位数(宽度)一定与机器字长相同的是:
    1. ALU
    2. 指令寄存器
    3. 通用寄存器
    4. 浮点寄存器

    解:机器字长是指计算机进行一次整数运算所能处理的二进制数据的位数,因此所有与整数运算相关的通路的宽度都和机器字长相同。也即 ALU 和通用寄存器一定与机器字长相同。

指令寻址

  • (2019)某计算机采用大端方式,按字节编址。某指令中操作数的机器数为 1234FF00H ,该操作数采用基址寻址方式,形式地址(用补码表示)为 FF12H ,基址寄存器的内容为 F0000000H ,则该操作数的 LSB (最低有效字节)所在的地址是?
    a F000FF12H
    b F000FF15H
    c EFFFFF12H
    d EFFFFF15H

    分析:考察补码运算,寻址,大、小端。
    FF12=1111 1111 0001 0010-->-0000 0000 1110 1101+1=-0000 0000 1110 1110=-00EE
    -00EE+F000 0000=EFFF FF12
    大端方式,低地址存高位,也即所求地址为EFFF FF12+3=EFFF FF15
    扩展大端,即存储顺序和阅读顺序一致(网络字节序),如10(int)为 000A ,小端,即和大端相反的存储顺序,如10(int)为 A000 ,写法中,从左到右为地址增加的方向,也即地址为左侧第一个字节的地址。
    扩展2:寻址方式,参见计算机组成原理-指令寻址示例。

指令执行及指令流水线

  • (2020)下列给出的处理器类型中,理想情况下,CPI为1的是哪些?

    1. 单周期CPU
    2. 多周期CPU
    3. 基本流水线CPU
    4. 超标量流水线CPU

    解:CPI指每指令需要的始终周期。单周期CPU每个指令固定周期为1,多周期CPU每个指令需要的时钟周期可以不相等,流水线CPU指指令之间通过一定手段并行执行,基本流水线是指在一个时钟周期内只执行一个指令一个子过程,超标量流水线可以在一个时钟周期内执行多个同一子过程。超标量流水线技术(多指令并发),超流水线技术(一个时钟周期一个功能部件使用多次),超长指令字(将多条并行指令合并为超长指令)。
    扩展单周期CPU因为所有指令都在一个时钟周期内执行,因此时钟周期取决于最长的指令周期。因而效率很低。多周期CPU是指将一个指令分为多个时钟周期去执行,则时钟周期不再限制于耗时最长的指令(而限制于分解后的最长操作步骤),这样就缩短了那些耗时很短的指令的执行时间。
    扩展2:时钟周期,机器周期,指令周期。指令周期:如取指、间指、执行、中断合称一个指令周期;机器周期:以一个访存过程为参考,如取指;时钟周期:CPU操作的最基本单位,一个机器周期可能由数个时钟周期组成。

  • (2019)某指令功能为 R[r2]R[r1]+M[R[r0]] ,其两个源操作数分别采用寄存器、寄存器间接寻址方式。对于下列给定部件,该指令在取数及执行过程中需要用到的是
    a 通用寄存器组
    b 算术逻辑单元
    c 存储器
    d 指令译码器

    分析,取数涉及间接寻址,因此需要使用通用寄存器和存储器,执行加法,需要使用算术逻辑单元。指令译码器在取指阶段使用(取指到IR之后,然后将其中操作码传送到指令译码器中)。
    扩展:指令周期的四个机器周期。
    取指周期:根据PC取地址至IR,然后PC+1,也即PC->MAR->MM,CU->CBUS->MM,MM->DBUS->MDR->IR,CU->PC+1。
    间址周期:取IR地址码对应数据,即Ad(IR)->MAR,CU->CBUS->MM,MM->DBUS->MDR。
    执行周期:根据IR指令的操作码和操作数执行操作。
    中断周期:保存断点(PC),执行中断服务程序(有中断的情况下),即CU->SP-1,SP->MAR->MM,CU->MM(write),PC->MDR->DBUS->MM,CU->PC(载入中断服务程序地址)。
    扩展2:CU(控制器):硬布线控制器和微程序控制器。以硬布线控制器为例,输入信号有IR(经过译码器),时钟(经过节拍发生器),执行反馈(标志),总线信号(中断、DMA等)。

  • (2018,20)若某计算机最复杂指令的执行需要完成 5 个子功能,分别由功能部件 A~E 实现,各功能部件所需时间分别为 80ps,50ps,50ps,70ps,50ps ,采用流水线方式执行指令,流水段寄存器延迟为 20ps ,则 CPU 时钟周期至少为?
    a 60ps
    b 70ps
    c 80ps
    d 100ps

    分析:简单流水线一个时钟周期内完成一个子功能,因此时钟周期按最长的时间设计。流水线寄存器是用于多级流水线之间传递数据的,因此也需要计算在内。

中断

  • (2018,22)下列关于外部 I/O 中断的叙述中,正确的是
    a 中断控制器按所接收中断请求的先后次序进行中断优先级排队
    b CPU 响应中断时,通过执行中断隐指令完成通用寄存器的保护
    c CPU 只有在处于中断允许状态时,才能响应外部设备的中断请求
    d 有中断请求时,CPU 立即暂停当前指令执行,转去执行终端服务程序

    分析:注意,题中是外中断,对立面是内中断。对 a ,中断控制器是根据中断的优先级进行排队的,如果优先级低,则在一个时钟周期内中断响应前,即使发生的早,也不会被优先响应。对 b ,注意通用寄存器不是在 CPU 中断响应的硬件部分执行,而是由中断服务程序(软件)执行的,硬件部分执行对程序中断位置的保护以及中断服务程序寻址,称为中断隐指令,后者执行对通用寄存器和状态寄存器的保护。对 c ,注意区别中断允许触发器和中断屏蔽触发器,中断允许触发器为禁止中断时,则 CPU 不响应外部中断。对 d ,CPU 只在特定时间能响应中断,如指令周期的中断周期,或者在执行中断响应程序时(允许中断嵌套)。

DMA

  • (2020)若设备采用周期挪用DMA方式进行输入输出,每次DMA传送的数据块大小为512字节,相应的I/O接口中有一个32位的数据缓冲寄存器。对于数据输入过程,下列叙述中,错误的是

    1. 每准备好32位数据,DMA控制器发出一次总线请求
    2. 相对于CPU,DMA控制器的总线使用权优先级更高
    3. 在整个数据块传送过程中,CPU不可以访问主存储器
    4. 数据块传送结束时,会产生“DMA传送结束”中断请求

    分析:这里考察DMA几种和CPU协调访存的方法。共介绍了三种方法:停止CPU访存;周期挪用;交替访问。要注意三者的区别。在数据块传送过程中,对于周期挪用方式,仅仅是在需要传送数据的时候需要访问主存(此时CPU不能访存),其它时刻都在等待设备准备数据,这样就提高了访存时间的利用率。
    扩展:
    停止CPU访存:外设需要传数据时,CPU放弃访存。缺点在于外设准备数据的周期大于访存周期,从而主存访问时间没有被充分利用。
    周期挪用(周期窃取):如果出现CPU和外设同时需要访存,则CPU延缓存取周期给DMA。
    交替访问:CPU工作较慢,而访存周期较短,则一个CPU周期可以划分为两段,分别用于CPU访存和DMA访存。
    注意DMA方式数据块的含义:DMA数据块表示在CPU准备环境后,DMA能连续工作传输的总数据量构成一个数据块。在一个数据块传输完成后,DMA通知CPU传送完成。在一个数据块内,DMA控制器能接管外设的输入输出,并直接与内存进行交换。

  • (2018,43)假定计算机的主频为 500MHz ,CPI 为 4 。现有设备 A 和 B ,其数据传输速率分别为 2MB/s 和 40MB/s ,对应 I/O 接口中各有一个 32 位数据缓冲寄存器。请回答下列问题,要求给出计算过程。
    (1)若设备 A 采用定时查询 I/O 方式,每次输入/输出都至少执行 10 条指令。设备 A 最多间隔多长时间查询一次才能不丢失数据?CPU 用于设备 A 输入/输出的时间占 CPU 总时间的百分比是多少?
    (2)在中断 I/O 方式下,若每次中断响应和中断处理的总时钟周期数至少为 400 ,则该设备 B 能否采用中断 I/O 方式?为什么?
    (3)若设备 B 采用 DMA 方式,每次 DMA 传送的数据块大小为 1000B ,CPU 用于 DMA 预处理和后处理的总时钟周期数为 500,则 CPU 用于设备 B 输入/输出的时间占 CPU 总时间的百分比最大是多少?

    分析:注意题干中要写计算过程的要求。事实上,所有的大题题目都应该大致写明计算过程。
    第一问。不丢失数据即两次查询的间隔刚好填满数据缓冲区,填满缓冲区耗时为 t=32/8B2MB/s=2×220s=219s 。其中用于输入输出的时间为 10×4/500MHz=0.08×220s=0.04×219s ,因此百分比为 0.04=4%
    第二问。设备 B 间隔耗时为 t=219/20=0.05×219s 。处理耗时为 400/500M=0.8×220s=0.4×219s 。也即处理耗时大于最大间隔,故不能。
    第三问。当 DMA 连续工作时,占比最大。每一个数据块准备时间为 1000B40MB/s=25×220s ,对应的 CPU 处理时间为 500/500MHz=220s ,也即处理占比为 125+14%

3 计算机操作系统

操作系统基础

  • (2018,23)下列关于多任务操作系统的叙述,正确的是
    a 具有并发和并行的特点
    b 需要实现对共享资源的保护
    c 需要运行在多 CPU 的硬件平台上

    分析:a,b 正确,c 错误。操作系统的基本特点有并发、共享、虚拟、异步。并发是在单处理机上实现并发执行,并行是在多处理机上实现并行执行。共享是指多个进程共享的使用某个资源。由于并发的支持,因此多任务操作系统不一定需要多 CPU 。

进程的状态

  • (2019)下列选项中,可能将进程唤醒的是
    a I/O 结束
    b 某进程退出临界区
    c 当前进程的时间片用完

    分析:注意进程唤醒的含义。
    扩展:进程共有新建、就绪、运行、阻塞、终止 5 种状态。进程执行 I/O 请求则阻塞态,I/O 完成则唤醒进入就绪态。就绪态和运行态之间通过调度进行转换。因此唤醒针对的一定是被阻塞的进程,唤醒的进程进入就绪态。没有时间片的进程称为就绪进程,就绪的进程通过进程调度进入运行态。

线程模型

  • (2019)下列关于线程的描述中,错误的是
    a 内核级线程的调度由操作系统完成
    b 操作系统为每个用户级线程建立一个线程控制块
    c 用户级线程间的切换比内核级线程间的切换效率高
    d 用户级线程可以在不支持内核级线程的操作系统上实现

    分析:线程有三种实现方式:内核支持线程,用户级线程,组合方式。
    内核支持线程:多个线程能够并行执行(多处理器);等等
    用户级线程:线程切换不涉及内核;阻塞问题会阻塞整个进程(所有进程内的线程);等等。操作系统不能感知用户级线程的存在。

进程同步

  • (2018,26)假设系统中有 4 个同类资源,进程 P1,P2 和 P3 需要的资源数分别为 4,3 和 1 ,P1,P2 和 P3 已申请到的资源数分别为 2,1 和 0 ,则执行安全性检测算法的结果是(安全序列?安全状态?)

    分析:答案为不存在安全序列,系统处于不安全状态。注意已分配资源和剩余请求资源。P3 先获取资源,此时 P2 和 P3 均不能继续执行,因此不存在安全序列。

  • (2018,28)若 x 是管程内的条件变量,则当进程执行 x.wait() 时所做的工作是
    a 实现对变量 x 的互斥访问
    b 唤醒一个在 x 上阻塞的进程
    c 根据 x 的值判断该进程是否进入阻塞状态
    d 阻塞该进程,并将之插入 x 的阻塞队列中

    分析:答案为 b 。注意信号量和条件变量在语义上的区别。条件变量一旦执行等待,则必然等待。在应用时,先检查资源可用情况,若不可用,则执行等待。而信号量是一个带值的同步原语,执行等待操作时是否等待与信号量的值有关。从语义上而言,信号量表示某一类资源可用数量,而条件变量表示期待某一条件触发。

主存管理

  • (2019)在下列动态分区分配算法中,最容易产生碎片的是
    a 首次适应算法
    b 最坏适应算法
    c 最佳适应算法
    d 循环首次适应算法

    分析:四种方式都是连续分配存储方式。首次适应算法从最低地址开始找第一个适合的空间;最坏适应算法找最大的空间;最佳适应算法找最靠近目标大小的适合的空间;循环首次适应算法循环找第一个最适合的空间。最佳适应算法总是会留下最小的剩余空间,因此最容易产生碎片。

中断和异常

  • (2020)下列事件中,属于外部中断事件的是
    1. 访存时缺页
    2. 定时器到时
    3. 网络数据包到达

    分析:访存缺页产生缺页异常,是虚拟存储器的一种机制。缺页中断与普通中断相比,其可以在指令执行期间产生并可能多次产生。缺页异常显然是由于指令执行过程产生的,因此属于内部中断。系统的定时器(硬件)和网络卡都属于外部设备,因此通过外部中断进行通信。
    在操作系统中,从用户态进入核心态的唯一途径是通过中断或异常。发生中断或异常时,CPU进入核心态是通过硬件实现的。
    中断是指外中断,异常是指内中断(不能仅仅通过名字来判断)。外中断和内中断的主要区别是中断信号的来源。
    中断处理流程硬件部分:关中断,保存断点(PC),中断服务程序寻址(to PC)。
    中断处理流程软件部分:保存现场和屏蔽字,(开中断),执行中断程序,(关中断),恢复现场和屏蔽字,开中断,中断返回。

文件管理

  • (2020)若多个进程共享同一个文件F,则下列叙述中,正确的是

    1. 各进程只能用“读”的方式打开文件F
    2. 在系统打开文件表中仅有一个表项包含F的属性
    3. 各进程的用户打开文件表中关于F的表项内容相同
    4. 进程关闭F时,系统删除F在文件打开表中的表项

    分析:多个进程共享文件时,按照一定的读写原则就可以了(读者-写者问题),如写写、读写互斥,读读不互斥。打开一个文件,则将指定文件的属性从外存复制到内存打开文件表的一个表目中。操作系统维护所有打开文件信息的表(打开文件表),同一个文件被多个进程打开只改变打开计数。打开文件的关联信息:文件指针、打开计数、磁盘位置、访问权限。文件指针和访问权限对进程而言是唯一的。
    以linux为例,文件描述符指向内核中的文件表,文件表记录了文件偏移量、文件状态标志,文件表指向v节点,v节点记录了文件信息,包括文件长度。多个进程打开同一个文件,则具有相同的v节点,每个打开描述符对应一个文件表项。不同的文件对应不同的v节点。此处文件表就相当于用户打开文件表(仍在内核中),v节点就相当于系统打开文件表。
    扩展:

  • (2020)某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为64个字节,其中4字节存放索引结点号,60字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量上限为?

    分析:目录项,目录项存放或者索引文件控制块FCB,如存放文件名和相应的文件描述信息的索引节点编号。索引节点可以看作指针,因此4个字节最多可以标记 232 个文件描述信息结点。文件名对文件数量的限制可以通过目录规避,因此最大的数量只受索引结点的限制。

文件系统

  • (2020)下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是

    1. 索引分配
    2. 链接分配
    3. 连续分配
    4. 动态分区分配

    对外存的管理有两个方面,一个是文件的分配方式,即对磁盘非空闲块的管理;一个是文件存储空间管理,即磁盘空闲块的管理。
    文件分配方式:连续分配,即文件在磁盘上占连续的块;链接分配,文件的每个块都可以链接到下一个块;索引分配:把所有的块集中形成索引块。FAT属于链接分配,将文件块的链接提取到文件分配表中(FAT),因此支持直接访问。

  • (2019)下列选项中,可用于文件系统管理空闲磁盘块的数据结构是
    a 位图
    b 索引结点
    c 空闲磁盘块链
    d 文件分配表(FAT)

    位图、空闲磁盘块链、FAT都可以用来管理空闲磁盘块。索引结点方式只能用来管理文件存储空间(因为索引的特点是查找快,而空闲空间是不需要查找的:找一个即可)。
    扩展:
    文件存储空间组织方式:连续组织方式;链接组织方式;FAT;NTFS;索引组织方式;
    空闲存储空间管理方式:空闲表法和空闲链表法;位示图法;成组链接法;
    连续组织方式:文件在物理地址上连续,能通过起始地址和长度(起始盘块和总盘块)确定一个文件。
    链接组织方式:按块链式分布在物理地址空间中。
    FAT 技术:和链接组织方式相似,文件目录存储起始块号,起始块号索引 FAT 表的表项。FAT 表存储文件的所有块的索引。一个磁盘只有一个 FAT 表。以 FAT16 为例,表项的宽度为 16bit,则最大表项个数为 216=65536 。即能索引 65536 个簇。由于 FAT 表表项和存储空间内的簇一一对应,因此 FAT 表同时能索引文件空间和空闲空间。
    索引素质方式:分为单级索引和多级索引。目录指向索引块,索引块指向所有数据块。多级索引则索引位置仍为索引。
    空闲表法和空闲链表发:列出所有空闲区块,通过表或链表形式。
    位示图法:一位代表一个盘块。
    成组链接法:结合了空闲表和空闲链表的优点,按组成链。既避免链过长,也避免表过大。

磁盘管理

  • (2018,30)系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁道黏着。下列磁臂调度算法中,不会导致磁臂黏着的是?
    a 先来先服务(FCFS)
    b 最短寻道时间优先(SSTF)
    c 扫描算法(SCAN)
    d 循环扫描算法(CSCAN)

    分析:答案为 a 。注意,对扫描算法和循环扫描算法,如果请求持续的出现在一侧,则会导致另一侧的请求长期不响应,尽管最终会响应。

死锁

  • (2020)某系统中有A,B两类资源各6个,t时刻资源分配即需求情况如下所示:
    进程 A已分配数量 B已分配数量 A需求总量 B需求总量
    P1 2 3 4 4
    P2 2 1 3 1
    P3 1 2 3 4
    t时刻安全性检测的结果是,存在安全序列:?

    分析:通过剩余资源和剩余需求,可以得出安全序列:P2,P1,P3。这是死锁避免的内容,相关请参考死锁(文)。

4 数据结构

KMP算法

  • (2019)设主串 T="abaabaabcabaabc" ,模式串 S="abaabc" ,采用 KMP 算法进行模式匹配,到匹配成功时为止,再匹配过程中进行的单个字符间的比较次数是
    A:9
    B:10
    C:12
    D:15

    分析:虽然通过PM表来实现KMP算法和标准的KMP算法不一致,但是在比较次数上,是可以参考的。PM表的做法更容易理解一些。
    首先建立PM表,注意由于PM表右移得到next表,因此PM表的第一位和最后一位均不需要计算。

    i a b a a b c
    PM - 0 1 1 2 -
    comp - 1 2 2 1 -
    next -1 0 0 1 1 2

    也即构造 next 表需要6次比较。

    abaabaabcabaabc
    abaabc:(6)
       abaabc:(4)
    

    也即匹配过程需要 10 次比较。
    这题存在一个模糊的地方,就是没有考虑构造next表的过程。
    后序这种题一律不考虑构造next表的流程。

树的顺序存储

  • (2020)对于任意一棵高度为 5 且有 10 个节点的二叉树,若采用顺序存储结构保存,每个节点占用一个存储单元,则存放该二叉树需要的存储单元至少是?

    解:注意:任意一棵。高度为 5 的树需要的存储空间为 1+2+4+8+16=31 ,即为 31

B 树

  • (2018,8)高度为 5 的 3 阶 B 树含有的关键字个数至少是?

    分析:熟悉 B 树的特征。对 3 阶 B 树,每个结点有 2 到 3 棵子树,即 1 到 2 个元素。高度最高的 3 阶 B 树就是每个结点只有 1 个元素的情况,因此高度为 5 的总元素为 251=31
    扩展:对 4 阶 B 树,每个结点有 2 到 4 棵子树,即 1 到 3 个元素;对 5 阶 B 树,每个结点有 3 到 5 棵子树,即 2 到 4 个元素,高度最高的情况是每个结点 2 个元素。
    B 树的插入方式为满则向上弹出元素,删除方式为向兄弟结点或者合并到兄弟结点。

矩阵的压缩存储

  • (2020)将一个 10×10 对称矩阵 M 的上三角部分的元素 mij(1j10) 按列优先存入 C 语言的一维数组中,元素 m7,2N 中的下标是?

    解:注意下标和序号的区别。1+2+...+6+2=23 ,即下标为 22

平衡二叉树

  • 数据结构 - 二叉平衡树

散列表

  • (2019)现有长度为11且初始为空的散列表HT,散列函数是 H(key)=key%7 ,采用线性探查(线性探测再散列)法解决冲突。将关键字序列87,40,30,6,11,22,98,20依次插入HT后,HT查找失败的平均查找长度为?

    分析:回顾,散列表处理冲突有两种方式,第一种是开放定址法,第二种是拉链法。开放定址法的每一个地址对同义词表项开放,也对非同义词表项开放,因此需要探查(是否占用,是否相同)。拉链法允许在一个表项中存储多个同一项,因此需要探查(是否相同)。开放定址法的探查方式又有线性探测、平方探测、再散列法等方法。

    p | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

    • | - | - | - | - | - | - | - | - | - | - | -
    • | 98 | 22 | 30 | 87 | 11 | 40 | 6 | 20 | nil | nil | nil

    平均查找长度:注意查找长度指比较次数,如果直接就能找到,则查找长度为1。
    查找成功的平均查找长度:指用表中已有的元素去查找(每个元素1次),平均的查找长度。
    查找失败的平均查找长度:指用表中没有的元素去查找(每个散列位置1次),平均的查找长度。

    p | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

    • | - | - | - | - | - | - | - | - | - | - | -
    • | 98 | 22 | 30 | 87 | 11 | 40 | 6 | 20 | nil | nil | nil
      suc | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2
      fail | 9 | 8 | 7 | 6 | 5 | 4 | 3

    因此成功平均查找长度=9/7
    失败平均查找长度=6
    注意:查找的失败条件:找到了空位,或者找遍了所有槽位,还是没有找到,则失败。
    特别注意:查找失败针对的是所有散列位置,查找成功针对的是已有元素。两者的对象不一致。

  • (2018,11)在将数据序列 (6,1,5,9,8,4,7) 建成大根堆时,正确的序列变换过程是?

    分析:画图之后,一定要注意避免直觉上的顺序。
    大根堆建堆为对每一个非叶节点(逆序)进行维护,因此先对 5 进行维护,然后对 1 进行维护,最后对 6 进行维护(不是树的图形上的每一层从左到右的过程,虽然从原理上来看也是可以的)。从算法实现上来看,就是从索引大的值开始维护,一直进行到索引为 0 的根节点。同时注意维护过程是递归的过程,如果交换了元素,则对被修改的子节点同样要执行维护。

排序

  • (2019)排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟。下列序列中,不可能是快速排序第二趟结果的是
    A:5,2,16,12,28,60,32,72
    B:2,16,5,28,12,60,32,72
    C:2,12,16,5,28,32,72,60
    D:5,2,12,28,16,32,72,60

    分析:快速排序每一次排序确定一个元素的最终位置,并将剩余元素分为两部分。
    A 第一趟选72,第二趟选28
    B 第一趟选72,第二趟选2
    C 第一趟选2,第二趟选32
    D 第一趟选12或32,则划分位两部分。如选32,则右侧有 72,60,是不符合第二趟排序结果的,选12也一样。因此D不对。
    注意:这种题目要注意划分之后两侧都要考虑。

  • (2019)设外存上有120个初始归并段,进行12路归并时,为实现最佳归并,需要补充的虚段个数是?

    关于最小带权路径,可以参考数据结构-排序-外部排序。此时直接应用结论,即补充虚段使得归并树的所有结点的度要么为0,要么为12,此时的树的叶节点记为m个,总结点记为n个,每增加11个叶节点,增加12个总结点,初始只有1个叶节点和总结点,也即 n112=m111 ,显然和 120 最接近的 m 为 11×11+1=122 ,也即需要补充2个虚段。

算法书写题

  • 参考数据结构-算法题。

  1. 《计算机组成原理·第 2 版》,唐朔飞,第 4 章,动态 RAM 的刷新。 ↩︎

posted on   amazzzzzing  阅读(12547)  评论(2编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示