《算法导论》中的习题:描述RANDOM(a, b)过程的一种实现,它只调用RANDOM(0, 1)
原理:算出a和b之间的差距d,求得最小的bit位数,使其恰好大于d,通过random(0, 1)来置位二进制位,然后加上a,如果该值落在[a, b]之间,满足条件,否则丢掉改值,继续寻找其他值!
以下是相应实现代码,但今天重点不是代码实现,而是验证随机性。
import java.util.Random;
/**
* 创建时间:2014年11月3日 上午午10:10:21 项目名称:Test
*
* @author Chan Leo
* @since
*/
public class RandomNumbersTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
RandomNumbersTest test = new RandomNumbersTest();
int a = 0;
int b = 3;
// System.out.println(getRandomNumber(a, b));
int[] result = new int[b - a + 1];
for (int i = 0; i < 100000; i++) {
int var = test.getRandomNumber(a, b);
for (int j = 0; j <= b - a; j++) {
if (var == j + a) {
resu