算法导论 5.1习题
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; } } } 来源: oschina 链接: https://my.oschina.net/u/111639/blog/42263