我需要一个生成器,用于许多(最多一万亿,10 ^ 12)个独特的随机64位数字。

生成器需要按排序顺序返回数字(Long.MIN_VALUE为Long.MAX_VALUE)。问题是排序$ 10 ^ {12} $ number的速度很慢。该用例正在复制为BBHash运行的测试(在paper中,4.5索引一万亿个密钥)。

直接的解决方案是在内存中创建一个集合,使用大量的集合

确保不会返回重复项。

但是这会占用太多内存或I / O.

我想最多使用几MB内部状态。

生成器应该在内部使用java.util.Random。

它应该是"公平"尽可能(具有相同的统计分布,如果否则生成)。我还希望有一个128位数字版本(2长)。

到目前为止我所拥有的是在内存中创建一个集合的代码(Java代码):

public static void main(String... args) {

for(long x : randomSet(10, 0)) {

System.out.println(x);

}

}

static Iterable randomSet(int size, int seed) {

Random r = new Random(seed);

TreeSet set = new TreeSet();

while (set.size() < size) {

set.add(r.nextLong());

}

return set;

}

-8292973307042192125

-7423979211207825555

-6688467811848818630

-4962768465676381896

-2228689144322150137

-1083761183081836303

-279624296851435688

4437113781045784766

6146794652083548235

7105486291024734541

最简单(错误)的解决方案是非随机的,是均匀分配结果。

我不认为解决方案会随着时间的推移添加一个随机的差距&#34;将工作,

因为它很慢,10 ^ 12之后这些间隙的总和不会降落到它应该的位置(好吧,也许:记住剩下多少个数,然后重新计算分布......)。我认为以下内容应该有效,但是很复杂,并且不确定要使用哪些公式:对于每个位级别,

递归地,计算可能发生多少0/1

(以某种方式使用二项分布或近似,正态/高斯分布)。

在某些时候停止(例如,100万条或更少的区块),

使用上面的代码,以获得速度。

但也许有一个优雅的解决方案。

也许这与Metropolis-Hastings算法有关,不确定。

我读了&#34;一种有效的顺序随机抽样算法&#34;,

但我认为这只适用于小n,我发现很难从中获得一个简单的算法。

Java代码是最好的,但C很好(无论如何,我可能必须将其转换为C / C ++)。我想不要使用太多的库来简化移植。

随机数排列JAVA_随机数生成器,按排序顺序相关推荐

  1. c语言生成随机数(c语言生成随机数并排序)

    vc环境下c语言怎么生成随机数能给个0-100之间的程序最好了- r = ( (double)rand() / ((double)(RAND_MAX) (double)(1)) ); 请问如何用C语言 ...

  2. C#文件和文件文件夹按时间、名称排序-顺序与倒序

    对于文件和文件夹有多种排序方式,常用的就是按创建或修改时间.按文件名排序.在 C# 中,按时间和文件名排序都十分简单,用数组提供的排序方法 Array.Sort() 一行代码就可以搞定,当然也可以用常 ...

  3. 获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行

    编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行 题目:编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行 ...

  4. 在多个指定区间内生成随机数,且随机数总和固定算法

    在多个指定区间内生成随机数,且随机数总和固定算法 一.介绍 最近项目上遇到了一个需求就是在多个指定区间内生成总和恒定的随机数. 示例:在[1-3].[4-20].[24-100]区间上分别生成一个随机 ...

  5. JavaScript sort 方法 默认排序顺序为按字母升序-数组常用方法

    默认排序顺序为按字母升序. 注意:当数字是按字母顺序排列时"40"将排在"5"前面. 使用数字排序,你必须通过一个函数作为参数来调用. 函数指定数字是按照升序还 ...

  6. 【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )

    文章目录 I TCP 传输过程 II TCP 传输示例 III TCP 传输特殊情况处理 I TCP 传输过程 1. TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ; ① 排序 : TCP ...

  7. Python 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序

    这个问题的要求是: 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,比如说 字符串'1982376455',变成'1355798642' 具体代码: def func1(l):if isins ...

  8. java treemap value排序_Java TreeMap升序|降序排列和按照value进行排序的案例

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  9. 数据结构(java版)SortedSeqList(排序顺序表)

    SortedSeqList(排序顺序表) 代码部分: public class SortedSeqList<T extends Comparable<? super T>> e ...

最新文章

  1. mysql2013年8月怎么打出来_2020年8月31日,上周完成了一个查询接口来检查mysql的数据,速度很慢,20200831,从,MySQL,中查,贼...
  2. 从信息时代到智力时代的药物发现
  3. 【周鸿祎:当下AI技术并不完善,存四大“冰点”】
  4. C++类的基本概念演示Win32版
  5. 点云网络的论文理解(七)-Frustum PointNets for 3D Object Detection from RGB-D Data
  6. 2018 中国准独角兽 TOP 50 夏榜发布!146 家投资机构、227 家企业参与
  7. OpenCV图像形态 image morphology的实例(附完整代码)
  8. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
  9. time模块及datetime模块常用方法讲解
  10. 文本文档TXT每行开头结尾加内容批处理代码
  11. Altiris™ IT Management Suite 7 Release Notes
  12. OpenStack:heat安装使用-Openstack Heat try-out
  13. 解决html5中video标签无法播放mp4问题的办法
  14. POI导出excel加水印
  15. Android终端系统APP应用性能测试之响应速度流畅度
  16. RISC-V MCU将常量定义到指定的Flash地址
  17. hapi mysql项目实战路由初始化_Hapi+MySql项目实战数据库操作(四)
  18. 微信会员卡,信息类目字段跳转小程序【custom_field1】【巨巨巨巨坑】
  19. 大制作,1500多行python代码实现各大平台音乐搜索,下载,收听
  20. SSL/TLS会话的流量分析

热门文章

  1. 算法--腾讯面试:单词游戏,谁会赢?
  2. 【JavaSE_06】Java中的数组(array)
  3. 玩转服务器(华为云)—环境安装(jdk安装,tomcat安装)
  4. Spring 整合Struts2
  5. 新建gradle项目时总在下载gradle.zip
  6. linux mint 硬件配置,安装 - 硬件设置 - 《Linux Mint 学习笔记》 - 书栈网 · BookStack...
  7. java的开源项目哪里找,我想参加开源项目的开发,请问在网上去哪找这样的项目? 纯C语言的(非C++或JAVA)...
  8. python网页登录钉钉_django 钉钉扫码登录
  9. java中int和integer的区别_Java异常中throw和throws关键字的区别
  10. 蓝桥杯 历届试题 合根植物(并查集)