Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • 数据结构

    • 位运算
    • 最基本的数据结构
    • 前缀和数组
    • random的随机行为
      • 给定一个1~5等概率随机的函数 返回一个7~15等概率的新函数
      • 给定一个0~1不等概率的随机函数 返回0~1等概率随机函数
    • 对数器
    • 二分法查找
    • 方法参数传递是值还是引用
    • 链表
    • 位图
    • 位运算实现四则运算
    • 二叉树
    • 排序
    • 时间复杂度
    • 队列和栈
    • 递归
    • 堆(优先级队列)
    • 贪心
    • 并查集
    • 图
    • 从暴力递归到动态规划
    • 滑动窗口
    • 单调栈
    • 线段树
  • 数据结构与算法

  • 计算机组成原理

  • 操作系统

  • 408
  • 数据结构
Iekr
2021-09-02
目录

random的随机行为

# random 的随机行为

Math.random 中的随机数 为伪随机数 产生一个 [0,1) 浮点型数

并且每个数产生的概率 为等概率 生成的数字是均匀的,也就是说该区间内部的每个数字生成的几率是相同的

int sum = 0;
for (int i = 0; i <= 100000; i++) {
    double ans =  Math.random();
    if(ans < 0.3) {
        sum++;
    }
}
//产生 100000 次 [0,1)的随机数 如果小于0.3则计数
//查询小于0.3出现的概率  为30%左右  所以我们可以判断MJath.random的随机行为为等概率的 
System.out.println((double)sum /100000.0 );
1
2
3
4
5
6
7
8
9
10

# 给定一个 1~5 等概率随机的函数 返回一个 7~15 等概率的新函数

首先 1~5 是等概率的 我们需要将此函数改为为只返回 0 和 1 的等概率函数

即如果给定的随机函数返回结果为 3 则重新生成随机数 直到生成不为 3 的结果 这样我们就可以获得一个 0 ~ 1 等概率随机生成的函数

7 ~ 15 为 9 个数 则对应的二进制为 1 0 1 需要 3 个二进制位 我们需要调用 3 次改造后的 0~1 等概率发生器

第一次结果左位移 2 位 第二次结果左位移 1 位 第三次结果不位移,最后将 3 次结果相加,这样我们获得 0~13 的等概率函数,并且我们进行截取 超过 9 的数重新调用 0~13 等概率函数

do{
    int ans =  f4();//0~13等概率函数
}while(ans > 9);
return ans;
1
2
3
4

这样我们获得一个 0~9 的等概率发生器 最后调用 0~9 等概率发生器 + 7 则完成此新函数

# 给定一个 0~1 不等概率的随机函数 返回 0~1 等概率随机函数

首先 0~1 是不等概率 我们通过调用两次此函数

0 0 概率则为 p*p

1 1 概率则为 (1-p)*(1-p)

0 1 概率为 p*(1-p)

1 0 概率为 (1-p)*p

通过筛选 01 和 10 结果即可以返回一个等概率的函数

01 则返回 0

10 则返回 1

// 给定一个 0和1不等概率的函数
public static int x() {
	return Math.random() < 0.8 ? 0 : 1;
}

// 返回一个等概率0和1的新函数
public static int x2() {
	int ans = 0;
	do {
		ans = x();
	} while (ans == x()); //如果两次都结果为0或1则重新调用x函数
    //只有 ans = 0 x()返回1
    //和 ans = 1 x()返回0 才返回ans
	return ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
前缀和数组
对数器

← 前缀和数组 对数器→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式