题目详解:
本题考察 标志寄存器,假设两个无符号整数 A 和 B,bgt 指令会将 A 和 B 进行比较,也就是将 A 和 B 相减。如果 A > B,则 A-B 肯定无进位/借位,也不为 0(为 0 时表示两数相同),故而 CF 和 ZF 均为 0,选 C。其余选项中用到了符号标志 SF 和溢出标志 OF, 显然应当排除。
题目详解:
(1) 求两个序列 A 和 B 的中位数最简单的办法就是将两个升序序列进行归并排序,然后求其中位数。这种解法虽可求解,但在时间和空间两方面都不大符合高效的要求,但也能获得部分分值。
根据题目分析,分别求两个升序序列 A 和 B 的中位数,设为 a 和 b。
① 若 a=b,则 a 或 b 即为所求的中位数。
原因:容易验证,如果将两个序列归并排序,则最终序列中,排在子序列 b 前边的元素为先前两个序列中排在 a 和 b 前边的元素;排在子序列 ab 后边的元素为先前两个序列中排在 a 和 b后边的元素。所以子序列 ab 一定位于最终序列的中间,又因为 a=b,显然 a 就是中位数。
②否则(假设a<b),中位数只能出现 (a,b) 范围内。
原因:同样可以用归并排序后的序列来验证,归并排序后必然有形如 ⋯a⋯b⋯ 的序列出现,中位数必出现在 (a,b) 之间。因此可以做如下处理:舍弃 a 所在序列 A 的较小一半,同时舍弃 b 所在序列 B 的较大一半。在保留两个升序序列中求出新的中位数 a 和 b,重复上述过程,直到两个序列中只含一个元素时为止,则较小者即为所求的中位数。每次总的元素个数变为原来的一半。
算法的基本设计思想如下。
分别求出序列 A 和 B 的中位数,设为 a 和 b,求序列 A 和 B 的中位数过程如下:
① 若 a=b,则 a 或 b 即为所求中位数,算法结束。
② 若a<b,则舍弃序列 A 中较小的一半,同时舍弃序列 B 中较大的一半,要求舍弃的长度 相等。
③ 若 a>b,则舍弃序列 A 中较大的一半,同时舍弃序列 B 中较小的一半,要求舍弃的长度 相等。
2)同步问题:顾客需要获得空座位等待叫号,当营业员空闲时,将选取一位顾客并为其服务。空座位的有、无影响等待顾客数量,顾客的有、无决定了营业员是否能开始服务,故分别设置信号量 empty 和 full 来实现这一同步关系。另外,顾客获得空座位后,需要等待叫号和被服务。这样,顾客与营业员就服务何时开始又构成了一个同步关系,定义信号量 service 来完成这一同步过程。