当前位置: 首页 > news >正文

【伪随机数】关于排序算法自测如何生成随机数而引发的……

以 Random 开始

可能一开始,你只是写到了排序算法如何生成随机数

public static void main(String[] args) {Random random = new Random();int[] nums = new int[10];for (int i = 0; i < nums.length; i++) {nums[i] = random.nextInt(100);}System.out.println("Before sorting...");for (int num : nums) {System.out.println(num);}quickSort(nums, 0, nums.length - 1);System.out.println("After sorting...");for (int num : nums) {System.out.println(num);}
}

然后想弱弱的问一句

Random random = new Random();
int num = random.nextInt(100);

num的取值范围包不包括 100?

然后,你看到了这篇文章~恭喜🎉~你以后再也不会忘记什么是伪随机数了

(什么、你并不想知道什么是伪随机数?……emmm来都来了,花一分钟瞅瞅呗_

一切都起源于这张图

我们大致翻译下上面👆的注释

返回一个介于 0(包含)和指定值(不包含)之间的伪随机(pseudorandom)、均匀分布的 int 值,该值取自随机数生成器的序列。

nextInt 的一般约定是在指定范围内伪随机生成并返回一个 int 值。

所有绑定的 int 值都会以(近似)相等的概率生成。

……

伪随机”?“(近似)相等的概率”?什么意思 为什么这么说我们 random 生成的随机数?

什么是伪随机数(pseudorandom)?

伪随机数就是由算法生成的随机数,真随机是真正随机的数。

emmmm...哈哈约等于没说哈

其实一般来讲,计算机生成的的都叫伪随机数,因为他们都有以下几点共同之处:

  • 算法可重现性:比如我们开篇引入内容提到的Random函数,它其实就是通过确定性的数学算法来生成随机数的,即只要给定相同的初始值(种子),就会按照固定的规则和步骤,产生完全相同的随机数序列(比如常见的伪随机数生成算法线性同余发生器(LCG))
  • 缺乏真正的不确定性:真正的随机数来源于自然界的随机事件,如放射性衰变、热噪声等,这些事件是不可预测的,具有真正的不确定性。正如上一个特性“算法可重现性”提到的,只要知道初始值和规则,就可以重现整个随机数序列,所以它并不是真正的不确定(只是我们无法简单的确定下一个是啥)。而真正的随机数,如基于量子随机数生成器产生的随机数,其每一个数值的出现都是独立的、不可重现的随机事件的结果。

为什么量子随机数生成器产生的就是真正的随机数?

大家应该有听过那个“薛定谔的猫”吧%%

这是一个著名的思想实验,在这个思想实验中,一只猫被放置在一个密封的盒子里,盒子内有一个装有毒气的装置,该装置与一个放射性原子相连。根据量子力学的解释,在未进行观测之前,放射性原子处于衰变与未衰变的叠加态,相应地,猫也处于既死又活的叠加态。只有当我们打开盒子进行观测时,原子的波函数才会坍缩,猫的状态才会确定为死或活。

量子随机数生成器中的量子比特(qubit)也处于类似的叠加态,直到被测量才会塌缩到0或1的某个确定状态,且塌缩到0或1的概率是相等的,这种不确定性是量子力学的基本特性,不是由任何外部因素或人为设定的算法所决定的,因此基于量子叠加态的测量结果具有真正的随机性

  • 周期性重复:虽然现代的伪随机数生成算法周期通常很长很长很长长长长……但理论上它们生成的随机数序列终究会重复。例如,梅森旋转算法的周期为2的19937次方减1,虽然这个周期非常长,在一般应用中几乎不会出现重复的情况,但从理论上讲,当生成的随机数数量达到这个周期时,序列就会开始重复。

梅森旋转算法(Mersenne Twister,MT19937)的周期到底有多长?

2^19937-1(2的19937次方减1),其实不是很有概念,这个数到底有多大?

宇宙有多大知道不emmmm

目前观测到的宇宙直径约为930亿光年,即9.3 × 10^10光年

换算成米为:

9.3 × 10^10 × 9.461 × 10^15 ≈ 8.8 × 10^26 米

那么2^19937米相当于多少个宇宙直径?

2^19937 / 8.8 × 10^26 ≈ 4.89×10^5974

相当于 4.89×10^5974 个宇宙直径

宇宙不太熟悉?那用地球算算。。。

地球的赤道周长约为40,075公里,即40,075,000米。

2^19937(2的19937次方)米相当于多少个地球周长?

简单除一下……2^19937/40,075,000 约等于1.07×10^5994

相当于绕地球赤道大约1.07×10^5994圈

以 Random 结束

我们回到一开始的问题:

Random random = new Random();
int num = random.nextInt(100);

num的取值范围包不包括 100?

不包括嘿嘿😊

[0,100) 左闭右开,就是函数注释中的第一句

返回一个介于 0(包含)和指定值(不包含)之间的伪随机(pseudorandom)、均匀分布的 int 值,该值取自随机数生成器的序列。

相关文章:

【伪随机数】关于排序算法自测如何生成随机数而引发的……

以 Random 开始 可能一开始&#xff0c;你只是写到了排序算法如何生成随机数 public static void main(String[] args) {Random random new Random();int[] nums new int[10];for (int i 0; i < nums.length; i) {nums[i] random.nextInt(100);}System.out.println(&q…...

核密度估计(Kernel Density Estimation, KDE)是一种非参数统计方法

一、核密度估计 核密度估计&#xff08;Kernel Density Estimation, KDE&#xff09;是一种非参数统计方法&#xff0c;用于估计随机变量的概率密度函数。它通过将每个数据点周围的核函数叠加&#xff0c;生成平滑的密度曲线。以下是其核心要点&#xff1a; 1. 基本概念 非参…...

【k8s面试题2025】2、练气初期

在练气初期&#xff0c;灵气还比较稀薄&#xff0c;只能勉强在体内运转几个周天。 文章目录 简述k8s静态pod为 Kubernetes 集群移除新节点&#xff1a;为 K8s 集群添加新节点Kubernetes 中 Pod 的调度流程 简述k8s静态pod 定义 静态Pod是一种特殊类型的Pod&#xff0c;它是由ku…...

栈溢出原理

文章目录 前言一、基本示例二、分析栈1. 先不考虑gets函数的栈情况2. 分析gets函数的栈区情况 三、利用栈1. 构造字符串2. 利用漏洞 前言 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;因而导致与其相邻的栈中的变量的值被改变。…...

Jmeter如何进行多服务器远程测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单…...

2.slf4j入口

文章目录 一、故事引入二、原理探究三、SLF4JServiceProvider四、总结 一、故事引入 故事要从下面这段代码说起 public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main( String[] args ) throws Exception {lo…...

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…...

软件测试—接口测试面试题及jmeter面试题

一&#xff0c;接口面试题 1.接口的作用 实现前后端的交互&#xff0c;实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...

图论的起点——七桥问题

普瑞格尔河从古堡哥尼斯堡市中心流过&#xff0c;河中有小岛两座&#xff0c;筑有7座古桥&#xff0c;哥尼斯堡人杰地灵&#xff0c;市民普遍爱好数学。1736年&#xff0c;该市一名市民向大数学家Euler提出如下的所谓“七桥问题”&#xff1a; 从家里出发&#xff0c;7座桥每桥…...

嵌入式开发通讯协议大全(在写中)

目录 modbus RTU通讯协议&#xff1a; pmbus通讯协议&#xff1a; modbus RTU通讯协议&#xff1a; 主要应用功能&#xff1a; 规范了软件变量&#xff0c;访问功能码&#xff0c;给不同工程师开发的不同产品有统一的通讯标准 帧结构简单&#xff0c;占用带宽少&#xff0c…...

webpack 4 升级 webpack 5

升级至最新的 webpack 和 webpack-cli npm run build 报错&#xff0c; unknown option -p 解决方案&#xff1a; 改成 --mode production npm run build 报错 unknown option --hide-modules 解决方案&#xff1a;直接移除 npm run build 报错&#xff1a;TypeError: Cannot a…...

oneplus3t-lineageos-16.1编译-android9, oneplus3t-lineage-14编译-android7

oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录 bfsu/lineageOS镜像 ts/lingeageOS镜像 oneplus3/lineage-build-simple-manual.md, manifest-p…...

HTML中最基本的东西

本文内容的标签&#xff0c;将是看懂HTML的最基本之基本 &#xff0c;是跟您在写文章时候一样内容。一般想掌握极其容易&#xff0c;但是也要懂得如何使用&#xff0c;过目不忘&#xff0c;为手熟尔。才是我们学习的最终目的。其实边看边敲都行&#xff0c;或者是边看边复制粘贴…...

<OS 有关>Ubuntu 24 安装 openssh-server, tailscale+ssh 慢增加

更新日志&#xff1a; Created on 14Jan.2025 by Dave , added openssh-server, tailescape Updated on 15Jan.2025, added "tailescape - tailscape ssh" 前期准备&#xff1a; 1. 更新可用软件包的数据库 2. 升级系统中所有已安装的软件包到最新版本 3. 安装 cur…...

神经网络常见操作(卷积)输入输出

卷积 dimd的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中nd-1,d-2对于torch.nn.Convnd(in_channels,out_channels)&#xff0c;改变的是tensor的倒数n1维的大小 全连接 使用torch.nn.Linear(in_features,out_features,bias)实现YXWT b,其中X 的形状为 (ba…...

25/1/16 嵌入式笔记 STM32F108

输入捕获 TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Period 0xFFFF; // 自动重装载值 TIM_TimeBaseStruct.TIM_Prescaler 71; // 预分频值 TIM_TimeBaseStruct.TIM_ClockDivision 0; TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up…...

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...

mysql常用运维命令

mysql常用运维命令 查看当前所有连接 -- 查看当前所有连接 SHOW FULL PROCESSLIST;说明&#xff1a; 关注State状态列&#xff0c;是否有锁。如果大量状态是waiting for handler commit检查磁盘是否占满关注Time耗时列&#xff0c;是否有慢查询关注Command列&#xff0c;如果…...

正则表达式学习网站

网上亲测好用的网站&#xff1a; Regexlearn 这个网站可以从0开始教会正则表达式的使用。 mklab 包含常用表达式&#xff0c;车次&#xff0c;超链接&#xff0c;号码等提取。...

gradle,adb命令行编译备忘

追踪依赖(为了解决duplicateClass…错误) gradlew.bat app:dependencies > dep-tree.txt # 分析dep-tree.txt的依赖结构&#xff0c;找到对应的包&#xff0c;可能需要做exclude控制,或者查看库issueverbose编译(我一直需要verbose) gradlew.bat assembleDebug -Dhttps.pr…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...