等概率随机函数的实现(对立事件的产生)

题目:

       给定一个随机函数rand(),以p的概率产生0,以1-p的概率产生1,要求设计一个新的随机函数,要求以1/n的概率产生1-n之间的一个数。

思路:

(1)通过随机函数rand()产生等概率的0和1的新随机函数rand_1()

(2)调用k次(k为n的二机制表示的位数)rand_1(),得到一个位长为k的0和1的序列

(3)上面产生的k个0/1序列表示1-n之间的数。

注意:

  如果如果产生的序列大于n,则重新产生直到产生的序列对应的值小于n

(1):产生rand_1()

int rand_1()

{

  int a = rand();

  int b = rand();

  if (a == 0 && b == 1)

    return 1;

  else if (a == 1 && b == 0)

    return 0;

  else

    return rand_1();

}

(2) 生成k,k=1 + log2(n)

(3)生成k个0/1序列

new_rand()

{

  int i = 0;

  for (i = 0; i < k; i++) {

    if (rand_1() == 1) 

      result |= (1 << i)

  }

  if (result > n)

    return new_rand();

}

posted on 2011-08-31 11:04  lambda107  阅读(517)  评论(0编辑  收藏  举报

导航