算法导论 5.1习题

﹥>﹥吖頭↗ 提交于 2020-12-17 08:54:35

5.1-1 该题个人认为有问题,这个过程只是一个最优次序问题,如果出现了次优比较时,该算法无法完成,所以总次序是应该是不能得到的。
5.1-2 可以利用前面分治法(Devide and Conquer)来求,将(a,b)范围二分缩小范围,因每次范围选取的概率为1/2,所以二分缩小的策略是可行的。最后只缩小为某个具体的数值。
同时,看到另一种解法,因为Random(a,b)的实质是以同概率随机取得[a,b)区间上的整数,则将每个整数表示为对应二进制,这样利用Random(0,1)来得到对应的整数,但是个人感觉需要考虑的边界条件比第一种策略要多很多,有兴趣可以仔细实现下。
5.1-3 这个题自己觉得挺逗,不是很难,而是训练你的思维是否僵化了,一开始我也是在找一个函数f,使得f(p)=f(1-p)=1/2对任意p成立,而实际上除非是常函数,不然做不到。然后就想了想别的办法,虽然每次0,1的随机概率不同,但是对于出现(0,1)和(1,0)时,0和1的随机选取概率都是1/2。即
int getRandom(){
  while(true){
    int x = random(0,1);
    int y = random(0,1);
    if(x != y){
       return x;
    }
  }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!