随机算法 之随机数的产生

编写随机算法程序的基础就是编写一个随机数产生器,实践过程中发现很多同学在使用c++的随机数产生函数
的时候都犯一个相同的错误——srand多次使用,我想那是因为对随机数产生过程不够了解造成的
产生随机数常用的有两种方法:
线性同余:
 x(0) = d
 x(n) = (b*x(n-1)+c)mod m
 这里有一个经验公式:x(n) = (314159269x(n-1)+453860245)mod 2^31
斐波那契发生器:
 x(n+1) = (x(n)+x(n-1))mod m (参考自张德福老师的《算法设计与分析-高级教程》)
所谓的srand播撒随机种子,其实就是产生一个初始的x(0),所以如果每一次使用rand的时候都用一次srand
那么必然会产生的结果就是如果两次srand过程是相继发生的,那么很有可能rand出来的结果都一样,这样当然
不会有好的随机数序列发生了。
下面是我用的一个随机数发生类,可以产生,任意【a b】区间的随机整数、浮点数。还可以通过构造函数提高
浮点数发声精度。(本类仅供参考)

#include<iostream>
#include<ctime>

using namespace std;

class Random {
 
 public:
  
  Random(int a,int b);
  
  Random();
  
  int random();
  
  int random(int a,int b);
  
  double randomf(int a,int b);
  
 private:
  
  double random1();
  int low;
  int high;
};

Random::Random()
{
 low = 0;
 high = 1000;
 srand((unsigned)clock());
}

Random::Random(int a,int b)
{
 low = min(a,b);
 high = max(a,b);
 srand((unsigned)clock());
}
 
int Random::random(int a,int b)

 int t = rand();
 
 return a+t%(b-a)+1;
}

int Random::random()
{
 return random(low,high);
}

double Random::random1() //0-1的随机数
{
 double m = (double)random();
 double n = (double)random();
 
 if(m==0&&n==0)return 0;
 else return (m<n)?(m/n):(n/m);
}

double Random::randomf(int a,int b)
{
 return a+(b-a)*random1();
}

随机算法 之随机数的产生相关推荐

  1. Dubbo中基于权重的随机算法

    转载自dubbo源码解析-LoadBalance dubbo的源码地址:https://github.com/alibaba/dubbo Dubbo中的RandomLoadBalance采用基于权重的 ...

  2. labuladong的算法小抄pdf_随机算法:水塘抽样算法

    读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...

  3. 算法导论之概率分析和随机算法

    在问题的分析中应用概率技术称为概率分析,前期是对所有可能的输入集合可以做假定.如果无法对输入分布做合理性建模,如果一个算法的行为不只是由输入决定,同时也由随机数生成器所产生的数值决定,则为随机算法.行 ...

  4. 使用轮转算法求时间片_彩票调度算法,让进程们拼手气? --当操作系统遇上随机算法...

    这篇文章主要想介绍下彩票调度(个人觉得这个算法非常有意思~ ),还有随机算法相对传统算法的一点优势,毕竟现在绝大多数算法都是追求确定性,尤其在操作系统,大家都希望一切可控,所以随机算法的出现听起来有些 ...

  5. 权重随机算法的java实现

    一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...

  6. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

  7. 微信红包随机数字_微信红包随机算法转载

    php固定红包 + 随机红包算法 1 需求 CleverCode最近接到一个需求,需要写一个固定红包 + 随机红包算法. 1 固定红包就是每个红包金额一样,有多少个就发多少个固定红包金额就行. 2 随 ...

  8. python 加权随机算法_加权随机算法 - 飞儿飞的个人空间 - OSCHINA - 中文开源技术交流社区...

    加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项.这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10 ...

  9. 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)

    文章目录 0. 前言 1. 拉斯维加斯方法 2. 蒙特卡罗方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 随机算法主要分为两种类型: 拉斯维加斯方法:采样次 ...

最新文章

  1. 二叉树最近公共祖先节点
  2. cisco 单词 词典
  3. java集群_身为Java程序员的你知道分布式与集群的联系及区别吗?
  4. 使用EasyMock或Mockito
  5. 突发!哈佛要求本科生5天内搬走,国际学生恐无家可归
  6. Linux下vim常用操作
  7. 蓝桥杯 BEGIN-2 入门训练 序列求和
  8. 四川大学mac用户登陆锐捷校园网指南
  9. adams c语言,Adams2013编译C语言用户子程序生成dll超详细教程讲解
  10. linux 搜狗不能打中文,linux下搜狗输入法不能输入中文的解决方案
  11. 104 自定义大头针
  12. Linux云主机 监控方案浅析
  13. 《郑军的回忆》文章记录了我3年的痛苦过去
  14. C++实现LR(1)分析表的构造
  15. tableau做折线图_用Tableau制作10种漂亮的折线图
  16. sqlmap写入一句话木马
  17. 摄像头poe供电原理_带你简单了解一下什么是POE供电
  18. CMS内容管理系统之文章信息模块的实现
  19. python quit()讲解_Python locals.QUIT属性代码示例
  20. 蓝牙解码格式哪个最好_蓝牙耳机哪个品牌最好?百位声学工程师说了真心话!_...

热门文章

  1. Word2013如何在中间某页重新编排页码,增加分节符。
  2. 自己写的团购网注水程序(仅供参考)来自:机敏的山猫
  3. 3.Maven 常用命令
  4. Docker 1.12.1初体验
  5. 实现多线程的方法有哪几种?
  6. 恢复系统映像时错误代码0X80070057的解决方案
  7. php图片转换软件,能能图片格式转换器 支持主流图片格式批量转换,简单实用的图片转换软件...
  8. 机器学习完整项目实战附代码(一):探索型数据分析+特征工程+建模+报告
  9. c语言指数爆炸月球,指数爆炸带来的震撼
  10. 【编译原理】确定有限自动机与非确定有限自动机