【算法】【算法杂谈】让[0,x)区间上的出现概率变为x^k
目录
- 前言
- 问题介绍
- 解决方案
- 代码编写
- java语言版本
- c语言版本
- c++语言版本
- 思考感悟
- 写在最后
前言
当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~
在此感谢左大神让我对算法有了新的感悟认识!
问题介绍
原问题
已知Math.random返回[0,1)范围上的数,那么落在[0,x)上的概率应该是x
现在实现一个函数仍然返回[0,1)范围的数,但是要求[0,x)上的概率应该是x^k次方,k为用户输入
比如k =2 ,返回的概率应该是x^2
解决方案
原问题:
首先实现一个最简单的x^2概率的函数,如何做?
答案是:两次rand取最大值即可
代码编写
java语言版本
原问题:
/*** 二轮测试:让[0,x)区间上的出现概率变为x^k* @param k* @return*/public static double randomXPowerKCp1(int k) {if (k < 1) {return 0;}double res = -1;for (int i = 0; i < k; i++) {res = Math.max(res, Math.random());}return res;}
c语言版本
正在学习中
c++语言版本
正在学习中
思考感悟
刚开始有点懵逼,后来才理解什么意思,原来就是进行k次的rand,如果出现一次比x大的rand就返回那个大的值即可。那么如果所有值都没有比x大,那么就返回[0,x)范围的数。
最近工作比较忙,所以偷个小懒,但是后面会上一个开源自己写的小组件,名字叫做httpTerminator(基于注解的http请求小工具,希望大家多多支持~)
写在最后
方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!