随机生成Long全范围数

news2025/1/19 14:11:48

随机生成Long全范围数

  • 前言
  • 实现思路
  • 主要代码
    • 分区
    • 随机生成过程
    • 案例:随机生成100个数
  • 朴素的比较
  • 总结

前言

使用自带的Random.nextLong()函数生成Long型的长整数,范围比较小,如下图。100个随机数没看见10以内的数字。所以考虑实现随机化生成大范围的长整数。
随机生产100个长整数

实现思路

以十进制位按区间随机生产

  1. Long型最大和最小数为19位,所以考虑分成38个区间,例如[0,9],[-9,-1],[10,99]…

  2. 然而,Math.random生成[0,1)之间的小数,意味着取不到区间的右端点。故增加一个区间存放每个区间的右端点的索引。

  3. 最后的区间划分为38个十进制位区间和一个特殊区间,如此就能保证可取长整数范围内的所有数。

主要代码

分区

首先划分出38个十进制位的区间,最后处理特殊区间即可

private static long[][] groupLongRange() {
    int unitCnt = 19;
    int len = unitCnt * 2 + 1;
    long[][] range = new long[len][2];
    long p = 1;
    for (int i = 0; i < unitCnt; ++i) {
        long l,r;
        long nl, nr;
        nr = -1 * p;
        if (i == 0) {
            l = 0;
            r = p * 10 - 1;
            nl = -1 * p * 10 + 1;
        } else if (i == 18) {
            l = p;
            r = Long.MAX_VALUE;
            nl = Long.MIN_VALUE;
        } else {
            l = p;
            r = p * 10 - 1;
            nl = -1 * p * 10 + 1;
        }
        range[i][0] = l; range[i][1] = r;
        range[i + unitCnt][0] = nl; range[i + unitCnt][1] = nr;
        p *= 10;
    }
    // 存储区间的末尾数字
    range[len - 1][0] = 0;
    range[len - 1][1] = len - 1;
    return range;
}

为了尽可能随机化,将生产的每个区间随机化排序,注意最后一个区间不参与排序。

/**
 * left - 排序的左起端点
 * len - 排序的子数组长度
 */
private static void randomSort(long[][] arr, int left, int len) {
    long start = System.currentTimeMillis();
    boolean[] v = new boolean[len];
    int cnt = left;
    while (cnt < len) {
        int k = (int) (left + Math.random() * len);
        if (!v[k]) {
            swap(arr, cnt, k);
            v[k] = true;
            ++cnt;
        }
    }
}

private static void swap(long[][] arr, int i, int j) {
    long t1 = arr[i][0];
    long t2 = arr[i][1];
    arr[i][0] = arr[j][0];
    arr[i][1] = arr[j][1];
    arr[j][0] = t1;
    arr[j][1] = t2;
}

随机生成过程

先随机生产数组下标,再随机生成对应下标范围内的数,二次随机。如果第一次随机到最后一个区间时,取得是右端点值。主要过程如下:

int len = range.length;
int ri = (int) (Math.random() * len);
long num = range[ri][0] + (long) (Math.random() * (range[ri][1] - range[ri][0]));
if (ri == len - 1) {
    // 因为每个区间的末尾取不到,所以设计多一个空间来存储,每个区间的末尾的下标
    num = range[(int) num][1];
}
// num 就是随机生成的长整数

案例:随机生成100个数

在这里插入图片描述
可见范围比自带随机化的要广

朴素的比较

以下是从时间维度进行对比

比较项自定义随机化内置随机化
1000007ms2ms
10000000152ms77ms
100000000014409ms7388ms

总结

自定义随机化过程耗时长,但是生成的随机数范围广

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用 摘要引言方法 Segmentation information with attention integration for classification of breast tumor in ultrasound image 摘要 乳腺癌是世界范围内女性最常见的癌症之一。基于超声成像的计算机辅助诊断&#x…

scp和rsync

引言 我们平时总会有在不同的设备之间传输文件的需要&#xff0c;好友同事间可以用微信、QQ、网盘等&#xff0c;还是比较方便安全的。而在linux的操作系统中&#xff0c;我们经常需要两台机器之间拷贝文件&#xff0c;或者由于业务需要备份文件&#xff0c;那就不得不用到scp和…

【React】基于JS 3D引擎库实现关系图(图graph)

主角&#xff1a;3D Force-Directed Graph 简介&#xff1a;一个使用ThreeJS/WebGL进行3D渲染的Graph图库 GitHub: https://github.com/vasturiano/3d-force-graph Ps: 较为复杂或节点巨大时&#xff0c;对GPU>CPU消耗较大&#xff0c;同量级节点对比下优于AntV G6和Echarts…

C语言之分支语句和循环语句

前言 一、什么是语句&#xff1f; 二、分支语句&#xff08;选择结构&#xff09; 2.1 if语句 2.2 switch语句 三、循环语句 3.1 while循环 3.2 break与continue语句 3.3 getchar()与putchar() 3.3.1 缓冲区 3.4 for循环 3.4.1 一些for循环的变种 3.5 do...while循…

java运行时内存

从jdk1.7以及以后&#xff0c;静态变量和常量池存在堆空间。

【TSP旅行商问题】改进的大邻域搜索算法LNS

课题名称&#xff1a;基于改进的大规模邻域搜索算法LNS求解TSP问题 版本时间&#xff1a;2024-04-01 程序运行&#xff1a;直接运行LNS_TSP.m 文件即可 代码获取方式&#xff1a; QQ&#xff1a;491052175 VX&#xff1a;Matlab_Lover 模型介绍&#xff1a; 第一步&…

[AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试

目录 关键词平台说明背景一、需求二、配置2.1 NvMBlockDescriptors2.2 NvMFeeRef2.3 FeeBlockConfigurations 三、code3.1 声明和定义3.2 调试 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编…

SpringBoot -- 外部化配置

我们如果要对普通程序的jar包更改配置&#xff0c;那么我们需要对jar包解压&#xff0c;并在其中的配置文件中更改配置参数&#xff0c;然后再打包并重新运行。可以看到过程比较繁琐&#xff0c;SpringBoot也注意到了这个问题&#xff0c;其可以通过外部配置文件更新配置。 我…

钉钉事件订阅前缀树算法gin框架解析

当钉钉监测到发生一些事件&#xff0c;如下图 此处举例三个事件user_add_org、user_change_org、user_leave_org&#xff0c;传统的做法是&#xff0c;我们写三个if条件&#xff0c;类似下图 这样字符串匹配效率比较低&#xff0c;于是联想到gin框架中的路由匹配算法&#xff0…

利用Spark将Kafka数据流写入HDFS

利用Spark将Kafka数据流写入HDFS 在当今的大数据时代&#xff0c;实时数据处理和分析变得越来越重要。Apache Kafka作为一个分布式流处理平台&#xff0c;已经成为处理实时数据的事实标准。而Apache Spark则是一个强大的大数据处理框架&#xff0c;它提供了对数据进行复杂处理…

Linux操作系统之nfs网络文件系统

目录 一、NFS简介 1.2 安装配置NFS 一、NFS简介 nfs类似于windows文件共享 将linux的一个目录共享到网络中&#xff0c;网络中的其他所有主机都可以使用这个共享目录中的文件 samba 文件共享 可以在linux中通过samba共享一个目录&#xff0c;然后在linux中可以访问这个共享 …

55 npm run serve 和 npm run build 的分包策略

前言 这里我们来看一下 vue 这边 打包的时候的一些 拆分包的一些策略 我们经常会使用到 npm run build 进行服务的打包 然后 打包出来的情况, 可能如下, 可以看到 chunk-vendors 是进行了包的拆分, 我们这里就是 来看一下 这里 npm run build 的时候的, 一个分包的策略 测试…

【HTML】简单制作一个唱片动画效果

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文件名改为[index.html]&#xff0c;CSS的…

Matlab|储能辅助电力系统调峰的容量需求研究

目录 1 主要内容 目标函数 约束条件 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《储能辅助电力系统调峰的容量需求研究》&#xff0c;主要是对火电、风电和储能等电力设备主体进行优化调度&#xff0c;在调峰能力达不到时采用弃负荷&#xff0c;程序以…

第十四届省赛大学B组(C/C++)子串简写

原题链接&#xff1a;子串简写 程序猿圈子里正在流行一种很新的简写方法&#xff1a; 对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n&#xff0c;Kubernetes 简写成 K8s&#…

【贪玩巴斯】Mac的M芯片(M1/2...)下载homebrew方法(24年最新且已验证可行)

1. 按照目前广为流传的方法&#xff08;M1会出现一些问题&#xff09;&#xff1a; 终端输入&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 使用国内镜像下载。 2. 输入后按照要求步骤执行即可&#xff…

docker-compose运行springinitializr用来创建springboot2

前言 spring initializr官方的地址是: https://start.spring.io/ &#xff0c;这是一个用来创建springboot脚手架的一个工具&#xff0c;但是目前这个工具已经更新到springboot3&#xff0c;而我还没学springboot3&#xff0c;目前还想继续创建springboot2&#xff0c;我就想能…

如何预防自己网站被流量劫持?HTTPS加密是否可行?

如何预防自己网站被流量劫持&#xff1f;HTTPS加密是否可行&#xff1f; 文章背景&#xff1a; 所谓的流量劫持&#xff0c;就是利用各种恶意软件修改浏览器、锁定主页或不停弹出新窗口&#xff0c;强制用户访问某些网站&#xff0c;从而造成用户流量损失的情形。 流量劫持是一…

前端三剑客 —— CSS (第一节)

目录 CSS 什么是CSS CSS的几种写法&#xff1a; 行内样式 内嵌样式 外链样式 import 加载顺序 CSS选择器*** 基本选择器 ID选择器 标签选择器 类选择器 通用选择器 包含选择器 上节内容中提到了 前端三剑客 —— HTML 超文本标记语言&#xff0c;这节内容 跟大家…

开发一个Java项目常用的工具类推荐

文章目录 新建Java项目pom.xml添加依赖添加代理仓库项目打jar包并上传配置Springboot依赖MySQL数据库相关依赖lombok接口文档Swagger相关其他常用工具类Hutool插件 完整的pom参考其他参考&#xff1a; 每次新起一个Java项目&#xff0c;都需要经历一系列的繁琐步骤去初始化这个…