之前看到一个算法题“用已有的rank7()函数生成rank10()函数”,看到了各种思路,不过看到一个可以用rankn()函数生成任意rankm()的通用方法比较有意思,就实现了一下记了下来。

该思路就是,首先用已有的rank7()生成随机数1-7,然后如果生成了1-3就返回0,生成了4-6就返回1,生成了7就重新生成。这样就把生成7个随机数变成等概率生成0或1。

然后用0和1生成一个4位的二进制数(因为 < 10 < ),因为每一位出现0和1的概率是相同的,所以从0000到1111这16个数字的概率也是相同的,然后用0000~1001这10个数分别对应1-10即可,如果生成了其他数就递归调用。

看代码:

import java.util.Random;class Solution{//循环四轮生成0000-1111二进制数并转换成1-10输出public static  int rand10() {int a = 0;for(int i = 0;i < 4;i++){a *= 2;a += rand2();}return a>9? rand10() : a+1;}//将7个随机数变成等概率生成0/1public static  int rand2(){int a = rand7();return a == 7? rand2() : a/4;}//用自带的rand7生成1-7随机数public static int rand7(){Random r = new Random();return r.nextInt(7) + 1;}public static void main(String args[]){   int array[] = new int[10];//用数组统计1-10的数量for(int i = 0;i < 10;i++){array[i] = 0;}//生成1000000个数,统计数量for(int i = 0;i < 1000000;i++){array[rand10() - 1] += 1;}for(int i = 0;i < 10;i++){System.out.println((i+1) + "的数量:" + array[i]);}}}

代码运行了3次,可以看到每次运行后生成10个数的数量差不多在10万左右

1的数量:99878
2的数量:100396
3的数量:99849
4的数量:100147
5的数量:100456
6的数量:99673
7的数量:99534
8的数量:100120
9的数量:99665
10的数量:100282
--------------------------------
1的数量:99517
2的数量:99800
3的数量:100175
4的数量:100146
5的数量:99990
6的数量:99844
7的数量:100204
8的数量:100163
9的数量:100214
10的数量:99947
---------------------------------
1的数量:100387
2的数量:99460
3的数量:99874
4的数量:100296
5的数量:100181
6的数量:100154
7的数量:99717
8的数量:99685
9的数量:100206
10的数量:100040

用rankn()等概率生成1~m的通用方法相关推荐

  1. 使用poi导出excel生成复杂多级表头通用方法

    使用poi导出excel生成复杂多级表头通用方法 话不多说,直接上代码,需要用的的实体类如下 话不多说,直接上代码,需要用的的实体类如下 package com.test;public class U ...

  2. hung-yi lee_p10_分类/概率生成模型

    文章目录 研究背景 本节目的 本节要使用的例子 研究过程 把分类当成回归来算 理想做法 找到最佳函数的方法 研究成果运用 运用过程 结果 方法改进 模型总结 讨论 为什么选择正态分布模型? 关于后验概 ...

  3. GRADE:联合学习演化节点和社区表示的概率生成模型

    作者 | 李梓盟 审稿 | 董靖鑫 今天给大家介绍加拿大蒙特利尔大学的著名学者唐建等人发表的一篇文章.作者在文章中针对现有的图动力学建模方法不能明确地捕捉到时间上的社区动态这一问题,提出了通过在轨迹上 ...

  4. 通过随机数生成兑换码和概率生成随机数

    以下的方法是可以用来生成兑换码,以及按概率处理生成随机数的方法 首先是按概率生成随机数的方法,假设奖品有30000分,20000分,10000分,3000分,2000分 function get_ra ...

  5. 李宏毅机器学习课程4~~~分类:概率生成模型

    分类问题用回归来解决? 当有右图所示的点时,这些点会大幅改变分类线的位置.这时候就会导致整体的回归结果变差.当把多分类当成回归问题,类别分别为1,2,3,4--,因为回归的问题是预测具体的值,这样定义 ...

  6. 由扔骰子看平均概率生成

    由扔骰子看平均概率生成 昨天读到一个帖子,说如何通过扔骰子的方法得到7件事的平均概率情况(扔骰子只能得到6件事的均概率),其中一种解法为,扔两次,分别记为x,y,则定义计算式m=(x-1)*6+y,可 ...

  7. 【李宏毅机器学习】05:概率生成模型Probabilistic Generative Model

    李宏毅机器学习05:概率生成模型 Probabilistic Generative Model 文章目录 李宏毅机器学习05:概率生成模型 Probabilistic Generative Model ...

  8. 概率生成模型:GDA和Navie Bayes

    1.线性分类软输出模型包含概率判别模型和概率生成模型 2.概率判别模型对条件概率建模,概率生成模型对联合概率建模 3.逻辑回归是经典的概率判别模型,GDA和朴素贝叶斯是生成模型 4.GDA三个假设,目 ...

  9. Java 按指定概率生成由字母、数字、特殊符号组成的密码

    package com.demo.uitls;import java.util.Random;/*** 按一定的概率生成一个随机的N位(N>=3)密码,必须由字母数字特殊符号组成,三者缺一不可* ...

最新文章

  1. java拍照搜题软件下载_修改版|学生福利!!免费拍照搜题秒出答案,扫一扫作业出答案!...
  2. flashpaper打印机没有被正确安装_没有正确保存与安装,可导致80%的轴承提早失效...
  3. 与计算机硬件相关的英语作文,计算机和计算硬件,computer and computing hardware,音标,读音,翻译,英文例句,英语词典...
  4. ICCV2021最佳检测之一:主动学习框架较大提升目标检测精度(附论文下载)
  5. java8新特性_Java8新特性之Date API|乐字节
  6. 现代谱估计:多窗口谱重建
  7. java 反射 静态域_java 内存 堆 栈
  8. boost::interprocess::managed_heap_memory用法的测试程序
  9. 如何从finally块访问方法的结果值
  10. 远程管理服务器的具体操作方法
  11. Bootstrap Table事件
  12. macbook proc如何升级到10.14.3
  13. 学习廖雪峰Git教程后对Git知识点的一些总结(4)
  14. Notes Ninth Day-渗透攻击-红队-打入内网
  15. 前端H5如何实现分享截图
  16. 【python实战】top4 华氏度与摄氏度互转
  17. Redis源码学习(13),t_set.c 学习(一),sadd,srem 命令学习
  18. 【JavaScript】移动端扫描二维码检测浏览器(微信、支付宝、Safari、其他浏览器)
  19. 完全背包与01背包的区别
  20. linux DSA 开发(一)

热门文章

  1. 关于JavaScript的Object所有方法
  2. WebBrowser打开Word文档的一些注意事项
  3. 淘宝直播医美,颜值经济崛起,如何抢占流量风口
  4. css里banner是什么,div+css banner的问题
  5. 上面两点下面一个三角形_图形学底层探秘 - 更现代的三角形光栅化与插值算法的实现与优化...
  6. 第1关 Numpy创建数组 (educoder
  7. 今日头条的推荐阅读你为什么都喜欢?
  8. 优化 Flash 性能
  9. chrome-Firefox-IE浏览器兼容总结
  10. 会火吗?苹果软件新专利:用户自拍照可组成合影