(只限于学习交流,未经许可,请勿用于商业用途)

目前的随机数算法产生的多是伪随机数,产生真的随机数则一般需要获取外界环境的输入。本算法是根据多线程中每个线程获得CPU时间的不确定性而产生随机数,具有无规律性、无法预测、数据分布均匀的特点,虽然随机数产生效率较低,但相信在某些场合可以用的到。

算法模型:计算机的每一位都是0或1,如果每一位对应一个独立的线程,在这个线程中不断改变对应位置的值,多位组合在一起就可以形成不同的二进制数字,每一刻访问都会得到随机组合的数。和摇杆抽奖类似。当然也可以每一位用0~9的数字进行循环,但是因为这样是有次序的循环,产生的随机数不够均匀。

关于CPU时间分配这一块不是很了解,个人认为这样产生的随机数是无法预测的,欢迎大家过来讨论。

附java代码的例子:

public class Random {private boolean flag = true, isFirst = true;private int[] a = new int[8];private Thread t0, t1;public boolean isFlag() {return flag;}public void setFlag(boolean flag) {//在结束随机数的产生之后,应把flag置为falsethis.flag = flag;}
    public int getRandom() throws InterruptedException {//如果是第一次,需要启动多线程if (isFirst) {isFirst = false;for (int i = 0; i < a.length; i++) {getSubThread(i).start();}}Thread.sleep(0, 1);//也可以用yield(),可提高几十倍效率,但产生的随机数分布不够均匀int sum = 0;//转换为十进制for (int i = 0; i < a.length; i++) {Thread.yield();sum = (sum << 1) + a[i];}return sum;}private Thread getSubThread(int i) {// TODO Auto-generated method stubThread t = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (flag) {a[i] ^= 1;Thread.yield();//让出线程,否则在flag变化后还可能继续消耗资源}}});return t;}
}

采用8位2进制,产生25600个随机数耗时约25~30s

下图是系统自带的随机数产生方法与本文的算法产生的随机数分布图,二者方差接近。


基于多线程的随机数生成算法相关推荐

  1. python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解

    Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...

  2. 【随机数生成算法系列】线性同余法和梅森旋转法

    一般我们用到的随机算法都是伪随机算法,什么叫伪随机算法呢?伪随机算法意思是假如知道第一个随机种子和随机算法的话就可以推算出下一个随机数.通常我们程序里都是通过当前时间作为随机函数的第一个随机种子,然后 ...

  3. 模拟QQ软件的基于多线程的流媒体加密传输软件技术

    模拟QQ软件的基于多线程的流媒体加密传输软件技术 模拟QQ软件,基于多线程编程捕捉摄像头及麦克风实时数据,基于socket通信设计发送端.接收端两个部分的,对音频和视频进行采集.加密或加水印.传输.解 ...

  4. 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)

    基于空间平滑MUSIC算法的相干信号DOA估计(1) 基于空间平滑MUSIC算法的相干信号DOA估计(1) 空间平滑MUSIC算法(1) 在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法 ...

  5. 【mahout笔记】初步理解userCF(基于用户的推荐算法)在mahout的实现

    昨天尝试在java中搭建了一个mahout的小demo,实现的就是基于用户的推荐算法.代码如下(更多代码和测试数据库)参见前一篇: public class RecommendTest {final ...

  6. 【mahout笔记】初步理解itemCF(基于物品的推荐算法)在mahout的实现

    之前分析了基于用户的CF的原理.今天尝试调试一下基于物品的CF算法. 再次声明,本文部分内容是参考:https://blog.csdn.net/wolvesqun/article/details/52 ...

  7. 基于采样的规划算法之RRT家族(二):RRT-Connect

    RRT家族和 A* 家族的共性是:都是生成一棵不断靠近目标的路径树.只是生成的方式不同,RRT家族通过随机采样结点来拓展路径树, A* 家族则基于贪心策略在规划问题图(graph)上搜索叶点来拓展路径 ...

  8. 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速

    基于C++的图像处理算法实现.INTEL CPU上SSE加速.ARM CPU上NEON加速 基于C++的图像处理算法在INTEL CPU上SSE加速实现 基于C++的图像处理算法在ARM CPU上NE ...

  9. 基于自然的灵感算法--元启发式

    问题一:自然赋予的元启发式优化算法的分类 自然赋予的元启发式算法(模拟生物或者物理的现象去解决问题)有三大类也就是:基于进化,基于物理的,基于群体的 基于进化的主要是受达尔文的物种进化理论的启发,主要 ...

最新文章

  1. 神舟台式计算机图片,扩展性媲美台式机!神舟战神K780G拆机图赏
  2. matlab中如何画隐函数方程组,怎样用matlab画隐函数
  3. 【AI不惑境】学习率和batchsize如何影响模型的性能?
  4. mybatis的Example[Criteria]的使用
  5. Spring配置redis(自定义方法)
  6. 二.hadoop环境搭建
  7. 数据分析为何能指导商业决策?
  8. Java 实现奇数阶幻方的构造
  9. 装饰器结构应用与基本使用(611)
  10. android 支付宝 6002,IOS支付宝支付出现6002问题的解决办法
  11. Detours注入DLL钩子入门教程
  12. 附录E-分贝(dB和dBm)的理解
  13. 数据库 基础 与命令 逻辑思维导图
  14. IOS APP 测试方法和测试工具大揭秘
  15. 将项目重新关联到svn
  16. 创造正面影响力的社群网 在Facebook能直接捐款给非营利公益组织
  17. 为什么尽量不要使用全局变量?
  18. 大数据技术之Kafka(一)Kafka概述、Kafka快速入门、Kafka架构深入
  19. 【数据】【自动化交易】Python编写策略模拟股票交易
  20. 【模型蒸馏】TinyBERT: Distilling BERT for Natural Language Understanding

热门文章

  1. deepin系统安装的若干问题
  2. Django学习 day79之drf第三日
  3. 图解Oracle数据库(二)
  4. mysql 百分比两位小数_SQL中如何让百分比后面保留2位小数?
  5. 服务器硬盘选金盘好吗,硬盘怎么选?NAS 盘、监控盘、企业级盘区别?
  6. 输入你的密码来连接到_手机无线网络可以连接但上不了网如何解决【详解】
  7. 数据传输性能与安全不能兼顾?Rambus安全方案“动静”两相宜
  8. 树莓派综合项目2:智能小车(一)四轮驱动
  9. 【黎乙丙】几种ps调色工具及使用方式
  10. Blender-绑定动画Auto-Rig Pro 重映射动捕FBX 小K结合 的问题以及解决