Exercises 5.1-1
Show that the assumption that we are always able to determine which candidate is best in line 4 of procedure HIRE-ASSISTANT implies that we know a total order on the ranks of the candidates.
证明:假设在过程 HIRE-ASSISTANT 的第四行中,我们总能够决定哪一个应聘者是最优秀的,则意味这我们知道所有应聘者排名的次序。
Answer
always这个词表示对所有n!种组合,都能够确定,而这n!种组合已经囊括了所有的两两比较的案例。
Exercises 5.1-2
Describe an implementation of the procedure RANDOM(a, b) that only makes calls to RANDOM(0, 1). What is the expected running time of your procedure, as a function of a and b?
请描述程序 RANDOM(a, b) 的一种实现方法,它只调用 RANDOM(0, 1)。作为一个关于a和b的函数,你的程序的期望运行时间是多少?
Answer
我们已经拥有一个 RANDOM(0, 1) 函数,现在需要生成 a~b 之间的随机数,我们可以使用二分法,使用 RANDOM(0, 1) 来划分出我们随机数是在 a~b 中的左边还是右边,然后依次类推下去,直到无法二分为止。显而易见,算法完成所需的循环次数 n n n 满足 2 n = ( b − a ) 2^n=(b-a) 2n=(b−a) ,这个算法的复杂度是 O ( l g ( n ) ) O(lg(n)) O(lg(n)),其中 n = ( b − a ) n=(b-a) n=(b−a)。
数学推导如下:
while循环的每次迭代都需要 O(n) 时间来运行,循环在给定迭代中停止的概率为 ( b − a + 1 ) ( 2 n )