草庐IT

伪随机码

全部标签

c++ - 如何随机化排序列表?

有一个奇怪的问题要问你们,我有一个很好的排序列表,我希望将其随机化。我该怎么做?在我的应用程序中,我有一个函数返回描述离散化对象轮廓的点列表。由于问题的解决方式,该函数返回一个漂亮的有序列表。我有数学中描述的第二个边界,想确定这两个对象是否相交。我只是迭代这些点并确定是否有任何一点在数学边界内。该方法效果很好,但我想通过随机化点数据来提高速度。由于我的数学边界很可能会被一系列彼此相邻的点重叠,我认为检查随机列表而不是迭代一个排序好的列表是有意义的(因为它只需要一个点击以声明交叉点)。那么,关于如何随机化有序列表有什么想法吗? 最佳答案

c++ - random_shuffle 算法 - 没有随机生成器函数会产生相同的结果吗?

如果标准库中的random_shuffle算法没有提供随机生成器函数,如果提供相同的数据,程序的连续运行会产生相同的随机序列吗?例如,如果std::random_shuffle(filenames.begin(),filenames.end());在程序的连续运行中对目录中的相同文件名列表执行,生成的随机序列是否与先前运行中的相同? 最佳答案 如果你使用相同的随机生成器、相同的种子和相同的起始顺序,结果是一样的。电脑毕竟是其行为具有确定性(模线程问题和其他一些赔率和结束)。如果不指定生成器,则默认生成器为实现定义。我认为大多数实现都

c++ - 如何在 C++ 中生成非常大的随机数

我想使用C++生成0-2^64范围内的非常大的随机数。我使用了rand()函数,但它没有生成非常大的数字。谁能帮忙? 最佳答案 对于c++11,使用标准randomlibraryofc++11,你可以这样做:#include#includeintmain(){/*Seed*/std::random_devicerd;/*Randomnumbergenerator*/std::default_random_enginegenerator(rd());/*Distributiononwhichtoapplythegenerator*/s

c++ - 生成两个独立的随机数序列(C++)

我希望能够做这样的事情(显然不是有效的C++):rng1=srand(x)rng2=srand(y)//rng1andrng2givemetwoseparatesequencesofrandomnumbers//basedonthesrandseedrng1.rand()rng2.rand()有没有办法在C++中做这样的事情?例如,在Java中,我可以用我想要的种子创建两个java.util.Random对象。似乎C++中只有一个全局随机数生成器。我确定有提供此功能的库,但无论如何仅使用C++即可? 最佳答案 使用rand_r.

c++ - 使用 Thrust 生成均匀分布的随机数

我需要使用Thrust生成一个包含0.0和1.0之间随机数的vector。我能找到的唯一记录示例会生成非常大的随机数(thrust::generate(myvector.begin(),myvector.end(),rand)。我确信答案很简单,但我将不胜感激任何建议。 最佳答案 Thrust具有随机生成器,您可以使用它来生成随机数序列。要将它们与设备vector一起使用,您需要创建一个仿函数,它返回随机生成器序列的不同元素。最直接的方法是使用计数迭代器的转换。一个非常简单的完整示例(在本例中生成介于1.0和2.0之间的随机单精度数

c++ - 均匀分布的随机数生成

为什么这段代码会生成均匀分布的数字?我在理解它时遇到了一些困难。有人可以解释吗?谢谢。intRandomUniform(intn){inttop=((((RAND_MAX-n)+1)/n)*n-1)+n;intr;do{r=rand();}while(r>top);return(r%n);}更新:我明白为什么rand()%n没有给你一个均匀分布的序列。我的问题是为什么top=((((RAND_MAX-n)+1)/n)*n-1)+n;这里有什么问题?我认为一个简单的top=RAND_MAX/n*n就可以了。 最佳答案 该函数假定ran

c++ - c++11在另一个线程中提前生成随机数

对于C++中的一些数值模拟,我需要生成许多具有指数分布的随机数(都具有相同的预定分布)。目前,我的程序运行良好,但超过50%的CPU时间花在了生成这些随机数上。我想做的是以不阻塞模拟主循环的方式生成这些随机数。更准确地说,我想要一个线程,它的工作是始终保持一个随机数“提前准备好”,并在有人读取这个随机数时立即生成一个新的随机数。有人知道这样做的好方法吗?目前,我的顺序代码如下所示:#include#include#includeusingnamespacestd;//exponentialrandomvariablewithparameterlambdaclassEXPGenerato

c++ - 在 C++ 中使用均匀实数分布生成的随机数并不是真正均匀分布的

我写了一个小代码来确保我可以从非常广泛的范围内获得随机数,例如。[0,10^36)因为我稍后会用到这些大范围。我的代码如下:#include#include#include#includeintmain(){unsignedseed=std::chrono::system_clock::now().time_since_epoch().count();doubleexpo=pow(10,36);std::uniform_real_distributiondist(0,expo);std::mt19937_64rng(seed);for(inti=0;i下面是一个输出示例:6.75507

数学建模系列_随机森林

数学建模系列_随机森林文章目录数学建模系列_随机森林【前言】【回顾】【简介】【正文】(一)理论部分1.随机森林的定义与特征2.集成学习(1)定义(2)特点与原理3.随机森林与决策树的关系4.构造随机森林的步骤(1)主要步骤(2)详细步骤5.随机森林的优缺点:(1)优点:(2)缺点:(二)实践操作1.应用于特征筛选(1)影响因素:(2)以UCIRaisin数据集为例2.应用于分类任务RandomizedSearchCV全局调优查看最佳参数组合GridSearchCV局部调优查看最佳参数组合预测输出3.应用于回归任务【前言】数学建模备赛内容参考视频:62随机森林模型基本原理_哔哩哔哩_bilibi

c++ - 生成 0 到 n 范围内的随机数,其中 n 可以 > RAND_MAX

如何生成0到n范围内的随机数,其中n可以是>RAND_MAX(在C、C++中)?谢谢。 最佳答案 将生成分成两个阶段,然后组合生成的数字。 关于c++-生成0到n范围内的随机数,其中n可以>RAND_MAX,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1527108/