算法导论5.1 Exercises 答案
5.1-1
如果我们可以确定排名最高的某个候选人;那么去掉这个人后,我们依旧可以确定出当前排名最高的某个候选人(也就是次高)……一直去掉最后一个人之后,那么就可以得到这些候选人的排名。
由于这种好的关系具有传递性,因此可以确定出这一些候选人的全序关系。
$\star$ 5.1-2
1 | RANDOM(a, b) |
从RANDOM(a, b)中获取随机数,相当于从a + RANDOM(0, b - a)中获取随机数。令$r=b-a+1,\beta=\lceil\lg r\rceil$。考虑生成一个$\beta$比特数$s$,如果$s< r$,那么返回$s+a$,否则重复进行即可。
那么,生成一个小于$r$的$\beta$比特数的概率为$\dfrac{r}{2^\beta}=2^{\lg r-\lceil\lg r\rceil}>\dfrac{1}{2}$。
可以发现第4行的while循环运行次数服从参数为$\dfrac{r}{2^\beta}$的指数分布,因此其期望运行次数为$\dfrac{2^\beta}{r}$。那么,RANDOM(0, 1)的被调用期望次数为$\beta\cdot \dfrac{2^\beta}{r}<2\beta$。因此RANDOM(a, b)的时间复杂度为$O(\lg(b-a))$。
$\star$ 5.1-3
1 | RANDOM() |
在单次循环中,考虑两次调用BIASED-RANDOM(),其结果分别为$x,y$。可以发现一共有$4$种结果,分别为$00,01,10,11$,那么接下来进行的操作如下:
- $00$,继续进行下一次循环。
- $01$,返回$0$。
- $10$,返回$1$。
- $11$,继续进行下一次循环。
这里用到的是输出$01$和$10$的概率都是$p(1-p)$。
将这两部分的概率值相加,可以发现这个while循环运行次数服从参数为$2p(1-p)$的指数分布,因此其期望运行次数为$\dfrac{1}{2p(1-p)}$。那么,BIASED-RANDOM的被调用期望次数为$\dfrac{1}{p(1-p)}$。因此RANDOM的时间复杂度为$\Theta\left(\dfrac{1}{p(1-p)}\right)$。