草庐IT

伪随机码

全部标签

c++ - C++ 中的 Gamma 分布随机变量

在C++中获取Gamma分布随机变量的最简单方法是什么?Boost好像有这个功能,但是我不清楚怎么用。 最佳答案 这很简单:boost::mt19937rng;boost::gamma_distributionpdf(alpha);boost::variate_generator>generator(rng,pdf);构造一个随机数生成器和一个gammadistribution并将它们粘合在一起成为一个可用的生成器。现在您可以通过调用generator创建随机数。 关于c++-C++中的

c++ - 如何使用 CUDA 生成随机排列

我可以使用哪些并行算法从给定的集合中生成随机排列?特别是适合CUDA的论文的建议或链接会很有帮助。这的顺序版本将是Fisher-Yates洗牌。例子:设S={1,2,...,7}为源索引集。目标是并行生成n个随机排列。n个排列中的每一个都恰好包含每个源索引一次,例如{7,6,...,1}。 最佳答案 Fisher-Yatesshuffle可以并行化。例如,4个并发worker只需要3次迭代来洗牌8个元素的vector。在第一次迭代中,它们交换01、23、45、67;第二次迭代02、13、45、67;以及最后一次迭代04、15、26、

c++ - 禁用 malloc 中的随机性

我正在运行以下简单的C程序:#include#includeintmain(intargc,char**argv){void*p=malloc(4);fprintf(stderr,"p==%p\n",p);return0;}不同的运行给出不同的结果:p==0x101c010然后:p==0x1ad9010然后:p==0xe77010等等。我记得,过去malloc是完全确定性的。所以可能从某个版本开始,一些随机性被添加到malloc。我现在在Ubuntu上使用gcc-4.6.3。有没有办法消除这种随机性? 最佳答案 如果变化是由地址空间

c++ - 一些随机的 C 问题(ascii 魔法和位运算符)

我正在尝试学习C编程,我正在研究一些源代码,但有些东西我不明白,尤其是关于位运算符。我阅读了一些关于此的网站,我对它们的作用有了一些了解,但是当我回头查看这些代码时,我无法理解它们使用的原因和方式。我的第一个问题与按位运算符无关,而是一些ascii魔术:谁能给我解释一下下面的代码是如何工作的?chara=3;intx=a-'0';我知道这样做是为了将char转换为int,但我不明白其背后的逻辑。为什么/如何运作?现在,关于按位运算符,我真的迷失在这里。这段代码是做什么的?if(~pointer->intX&(1我在某处读到~反转位,但我看不出这条语句在做什么以及为什么要这样做。与此行相

c++ - 播种随机数生成器 C++

这个问题在这里已经有了答案:HowtogeneratearandomnumberinC++?(14个答案)关闭5年前。我有两个问题。在不使用srand(time(NULL))的情况下,还有哪些其他方法可以在C++中为伪随机数生成器提供种子?我问第一个问题的原因。我目前使用时间作为生成器的种子,但生成器返回的数字始终相同。我很确定原因是因为存储时间的变量在某种程度上被截断了。(我有一条警告消息说,“隐式转换失去整数精度:'time_t'(又名'long')到'unsignedint')我猜这告诉我本质上我的种子要到明年才会改变发生。出于我的目的,使用时间作为我的种子会工作得很好,但我不知

c++ - 如何从 vector 中获取随机且唯一的值?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:UniquerandomnumbersinO(1)?UniquerandomnumbersinanintegerarrayintheCprogramminglanguage我有一个std::vector的一些未确定大小的独特元素。我想从此vector中获取20个独特且随机的元素。“唯一”是指我不想多次获取同一个索引。目前我这样做的方法是调用std::random_shuffle。但这需要我打乱整个vector(可能包含1000多个元素)。我不介意改变vector(虽然我不喜欢,因为我不需要使用线程锁),但最重

c++ - 大于 100,000 的随机数

我正在用C/C++编写代码,我想创建很多大于100,000的随机数。我会怎么做?使用rand(); 最佳答案 您不会使用rand来做到这一点,但是使用更新的C++附带的适当的随机数生成器,请参见例如cppreference.com.constintmin=100000;constintmax=1000000;std::default_random_enginegenerator;std::uniform_int_distributiondistribution(min,max);intrandom_int=distribution(

c++ - Qt/c++随机字符串生成

这个问题在这里已经有了答案:CreatearandomstringornumberinQt4(7个答案)关闭9年前。我正在创建一个应用程序,我需要在其中生成多个随机字符串,几乎就像一个由一定长度的ASCII字符组成的唯一ID,其中混合了大写/小写/数字字符。是否有任何Qt库可以实现此目的?如果不是,在纯C++中生成多个随机字符串的一些首选方法是什么?

C++。 RNG 是否有可能在使用相同种子的两台不同机器中给出不同的随机变量?

我有一段冗长而复杂的源代码,它使用带有修复种子的随机数生成器。这段代码是一个模拟器,这个模拟器的参数就是这个RNG给出的随机值。当我在同一台机器上执行代码时,无论我尝试多少次,输出都是一样的。但是当我在两台不同的机器上执行这段代码并比较两台机器的输出时,它们是不同的。是否有可能两台不同的机器使用相同的随机数生成器和相同的种子给出不同的输出?编译器版本、库和操作系统相同。 最佳答案 这当然是可能的,因为RNG可能会将机器特定数据与种子(例如网卡地址)结合起来以生成随机数。它基本上是特定于实现的。

C++:字符串 vector 的随机访问时间如何工作?

我知道一个简单的intvector有O(1)的随机访问时间,因为它很容易计算第x个元素的位置,给定所有元素都具有相同的大小。现在字符串vector怎么了?由于字符串长度不同,它不能有O(1)的随机访问时间,不是吗?如果可以,背后的逻辑是什么?谢谢。更新:回答的非常清楚简洁,谢谢大家的帮助。我接受了Joey的回答,因为它简单易懂。 最佳答案 vector确实有O(1)的访问时间。String对象都具有相同的大小(在给定的实现上),无论它们表示的字符串的大小如何。通常,字符串对象包含指向已分配内存的指针,该内存包含字符串数据。因此,如果