java随机值函数,随机变量函数

  java随机值函数,随机变量函数

  这篇文章带给你一些关于java的知识,包括Java中随机函数的转换。本文中的样例代码讲解的很详细,对我们学习Java很有帮助。有兴趣的可以看看。

  如何解决写爬虫IP受阻的问题?立即使用。

  

解决的问题

  

问题1

   Java中的Math.random()函数以等概率返回区间[0,1]中的任意小数。也就是在x 1的情况下,[0,x]中的数的概率是x,如果我们想在x 1的情况下把[0,x]中的数的概率调整为x 2,应该怎么做?

  1质疑想法

  由于[0,x]的概率是x,所以调用Math.random()两次。如果较大的值也在[0,x]区间内,那么两次调用都必须在[0,x]区间内(因为[x,1]中的任何一个时间都会导致返回值不在[0,x]上),也就是说,概率为

  包片段;

  公共类代码_0004_RandToPow2 {

  //将`[0,x)中数字的概率调整为` x ^ 2`。

  公共静态double randToPow2() {

  返回Math.max(Math.random()、math . random());

  }

  }我们可以通过下面的测试代码来验证问题1的解决方案:

  包片段;

  公共类代码_0004_RandToPow2 {

  //将`[0,x)中数字的概率调整为` x ^ 2`。

  公共静态double randToPow2() {

  返回Math.max(Math.random()、math . random());

  }

  //测试用例

  公共静态void main(String[] args) {

  int count=0;

  int testTimes=10000000

  双x=0.17

  for(int I=0;我测试时间;i ) {

  if (randToPow2() x) {

  数数;

  }

  }

  system . out . println((double)count/(double)test times);

  System.out.println(Math.pow(x,2));

  }

  }打印结果如下

  接近目标要求。

  

问题2

  假设我们有一个随机函数F(),它可以等概率返回[1,5]中的一个数。如何在不引入其他随机函数的情况下只利用f()函数,得到一个等概率返回[1,7]中任意数的函数G()。

  思考

  因为目标是找到[1,7]并等概率返回1,如果我们可以等概率处理一个返回[0,6]范围内任意数的X()函数,那么目标函数G()只需要调用这个X()函数加1,这就是G()函数的要求。

  public static int g() {

  返回x()1;

  }要得到[0,6]的等概率,返回一个数,我们是需要先得到一个0和1等概率返回的随机函数m(),可以通过f()函数得到,即。

  //随机函数f()以等概率[0,5]返回

  //算出等概率得到0和1

  //1,2,3,4,5五个数字

  //当你得到1,2时,返回0

  //当你得到4,5时,返回1

  //当你得到3时,丢弃它,再试一次

  public static int m() {

  int ans=0;

  做{

  ans=f();

  } while(ans==3);

  还ans 3?0 : 1;

  }利用等概率返回0和1的随机函数M(),我们可以很容易地生成[0,6]等概率随机返回一个数的方法。因为[0,6]需要三个二进制数,那么我们可以调用M()函数三次,等概率得到[0,7]范围内的任意数。我们可以在得到7时重试上述过程。

  //等概率返回0~6

  public static int x() {

  int ans=0;

  做{

  ans=(m()2)(m()1)m();

  } while(ans==7);

  返回ans

  }最后,目标函数f()如下

  //等概率返回1~7

  public static int g() {

  返回x()1;

  }你可以得到它。完整的代码如下

  包片段;

  公共类代码_0005_Rand5ToRand7 {

  //这个函数只能使用,不能修改。

  //等概率返回1~5

  public static int f() {

  return(int)(math . random()* 5)1;

  }

  //随机函数f()以等概率[0,5]返回

  //算出等概率得到0和1

  //1,2,3,4,5五个数字

  //当你得到1,2时,返回0

  //当你得到4,5时,返回1

  //当你得到3时,丢弃它,再试一次

  public static int m() {

  int ans=0;

  做{

  ans=f();

  } while(ans==3);

  还ans 3?0 : 1;

  }

  //等概率返回0~6

  public static int x() {

  int ans=0;

  做{

  ans=(m()2)(m()1)m();

  } while(ans==7);

  返回ans

  }

  //等概率返回1~7

  public static int g() {

  返回x()1;

  }

  }

问题3

  和问题2的思路一样。核心是要先实现一个等概率返回 0 和 1 的随机函数m()。。然后,看目标函数区间需要多少个二进制位来决定调用M()函数的次数。这里就不重复了。查看完整代码。

  /**

  *父类SolBase中已经定义了rand7() API。

  * public int rand 7();

  * @返回1到7之间的随机整数

  */

  类解决方案扩展了SolBase {

  public int rand10() {

  返回兰特(10);

  }

  public int rand(int N) {

  int位=1;

  int base=2;

  while (base=N) {

  base=2位;

  位;

  }

  int v=build(位);

  while (v 1 v N) {

  v=构建(位);

  }

  回归v;

  }

  私有int build(int bit) {

  int v=0;

  for(int I=0;我咬了;i ) {

  v=(m()I);

  }

  回归v;

  }

  //核心:生成0和1概率相等的随机函数。

  public int m() {

  int I=rand 7();

  while (i==7) {

  I=rand 7();

  }

  return (i==1 i==2 i==3)?0 : 1;

  }

  }

问题4

  有一个函数f(),以不等概率(但固定概率)返回0和1。如何仅通过f()函数得到一个等概率返回0和1的随机函数g(),

  想法,

  调用f()函数两次,可以得到如下结果

  当两次都是0,或者两次都是1,放弃。虽然0和1的概率不同,但是

  概率一定是一样的。

  所以得到0 ^ 1就返回0,得到1 ^ 0就返回1,也就是G()函数。

  完整的代码如下

  包片段;

  //不等概率随机函数变成等概率随机函数

  公共类代码_0005_EqualProbabilityRandom {

  //不等概率函数,

  //内部内容不可见

  public static int f() {

  返回Math.random() 0.8?0 : 1;

  }

  //以相等的概率返回0和1

  public static int g() {

  int优先;

  做{

  first=f();//0 1

  } while(first==f());

  先退;

  }

  }推荐学习:以上《java视频教程》是Java中随机函数变换实例的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: