Tag: 随机

需要一个快速的随机生成器的C + +

我试图做一些opt-3交换我的TSP发生器的欧几里德距离,因为我在很多情况下有超过500个节点,我需要随机select我想尝试交换的3个节点中的至less1个。 所以基本上我需要一个快速的随机数函数。 (正常的rand()方式太慢)它不一定非常好,只是够好。 编辑:我忘了提及,我坐在一个环境,我不能添加除标准语言库(如STL,iostream等)以外的任何库。 所以没有提升= /

在Python中生成非重复的随机数

好吧,这是比听起来更棘手的问题之一,所以我转向堆栈溢出,因为我想不出一个好的答案。 这是我想要的:我需要Python生成一个简单的从0到1,000,000,000的数字列表随机顺序,用于序列号(使用一个随机数,以便你不能告诉有多less已经分配或做的时间攻击很容易,即猜测下一个将会出现)。 这些数字与链接到它们的信息一起存储在数据库表(索引)中。 生成它们的程序不会永远运行,所以它不能依赖于内部状态。 没什么大不了的 只要生成一个数字列表,把它们推到一个数组中,并使用Python“random.shuffle(big_number_array)”,我们就完成了。 问题是我想避免必须存储一个数字列表(从而读取文件,从顶部popup一个,保存该文件并closures它)。 我宁愿在飞行中产生它们。 问题是我能想到的解决scheme有问题: 1)生成一个随机数,然后检查它是否已被使用。 如果已经使用,则生成一个新的号码,检查,根据需要重复,直到find一个未使用的号码。 这里的问题是,我可能会得到不幸,并在获得一个未使用的数字之前产生大量使用的数字。 可能的解决方法:使用一个非常大的数字池来减less这个可能性(但是最后我得到了愚蠢的长数字)。 2)生成一个随机数,然后检查它是否已被使用。 如果已经使用过,请从数字中加上或减去一个,然后再次检查,继续重复,直到我点击一个未使用的数字。 问题是这不再是一个随机数,因为我已经引入了偏见(最终我会得到数字的团队,你可以预测下一个数字,更好的成功机会)。 3)生成一个随机数,然后检查它是否已被使用。 如果已经使用了加或减另一个随机生成的随机数并再次检查,问题是我们回到简单生成随机数并检查解决scheme1。 4)把它吸起来,并生成随机列表并保存它,让一个守护进程把它们放入一个队列中,这样就有了可用的数字(并避免不断地打开和closures一个文件,而不是一个文件)。 5)生成更大的随机数并散列它们(即使用MD5)以获得更小的数值,我们应该很less发生冲突,但是最终我会得到比所需数字更大的数字。 6)在随机数(即unix时间戳)上添加或附加基于时间的信息,以减less碰撞的机会,再次获得比我需要的更大的数字。 任何人都有任何聪明的想法可以减less“碰撞”(即产生一个已经采取的随机数)的机会,但也可以让我保持“小”(即less于十亿你的欧洲人=))。 答案,为什么我接受它: 所以我会简单的跟1一起去,希望这不是问题,但是如果是这样的话,我会用确定性的方法来生成所有的数字并存储它们,以便保证得到一个新的随机数,我可以使用“小号”(即9位而不是MD5 /等)。

第一个随机数总是小于rest

我碰巧注意到,在C ++中,用std rand()方法调用的第一个随机数大部分时间比第二个随机数小得多。 关于Qt的实现,第一个几乎总是小几个数量级。 qsrand(QTime::currentTime().msec()); qDebug() << "qt1: " << qrand(); qDebug() << "qt2: " << qrand(); srand((unsigned int) time(0)); std::cout << "std1: " << rand() << std::endl; std::cout << "std2: " << rand() << std::endl; 输出: qt1: 7109361 qt2: 1375429742 std1: 871649082 std2: 1820164987 这是打算,由于错误播种或错误? 同样,当qrand()输出强烈变化时,第一个rand()输出似乎随时间线性变化。 只是想知道为什么

Math.random()返回大于一的值吗?

在JavaScript中使用随机数字时,我发现了一个令人惊讶的错误,大概是在Google Chrome的V8 JavaScript引擎中。 考虑: // Generate a random number [1,5]. var rand5 = function() { return parseInt(Math.random() * 5) + 1; }; // Return a sample distribution over MAX times. var testRand5 = function(dist, max) { if (!dist) { dist = {}; } if (!max) { max = 5000000; } for (var i=0; i<max; i++) […]

什么是性能明智的产生随机布尔最好的方法?

我需要在性能关键path上生成随机布尔值。 我为此编写的代码是 std::random_device rd; std::uniform_int_distribution<> randomizer(0, 1); const int val randomizer(std::mt19937(rd())); const bool isDirectionChanged = static_cast<bool>(val); 但不要认为这是做这个的最好方法,因为我不喜欢做static_cast<bool> 。 在网上我发现了一些更多的解决scheme 1. std::bernoulli_distribution 2. bool randbool = rand() & 1; 记得在开始时调用srand() 。

从shell脚本的目录中select随机文件的最佳方法

从shell脚本的目录中select一个随机文件的最佳方法是什么? 这里是我在Bash中的解决scheme,但是对于在Unix上使用的更便携(非GNU)版本,我会非常感兴趣。 dir='some/directory' file=`/bin/ls -1 "$dir" | sort –random-sort | head -1` path=`readlink –canonicalize "$dir/$file"` # Converts to full path echo "The randomly-selected file is: $path" 任何人有任何其他的想法? 编辑: lhunathparsingls的好处。 我想这归结于你是否想要移植或不移动。 如果你有GNU findutils和coreutils,那么你可以这样做: find "$dir" -maxdepth 1 -mindepth 1 -type f -print0 \ | sort –zero-terminated –random-sort \ | sed 's/\d000.*//g/' 噢,那很有趣! 从我说的“随机文件”来看,它更符合我的问题。 尽pipe如此,现在很难想象一个安装了GNU但不包含Perl 5的Unix系统。

从mysql中的一个大表中快速select一个随机的行

什么是从大的MySQL表中select一个随机行的快速方法? 我正在使用PHP,但是即使使用其他语言,我也对任何解决scheme感兴趣。

生成随机出生date

我试图使用Java程序为我的数据库中的人生成随机出生date。 我将如何做到这一点?

随机引擎的差异

C ++ 11标准为随机数生成指定了许多不同的引擎: linear_congruential_engine , mersenne_twister_engine , subtract_with_carry_engine等等。 显然,这是std::rand的旧用法的一个很大的改变。 显然,这些引擎(至less有一些)的主要好处之一就是大大增加了周期长度(它被构build在std::mt19937的名字std::mt19937 )。 但是,引擎之间的差异不太清楚。 不同引擎的优缺点是什么? 什么时候应该使用另一个? 是否有一个明智的默认应该通常是首选?

R中的种子行为与rbinom(prob = 0.5)不稳定

我发现当使用prob=0.5时, R的种子与rbinom()结合使用时,我会考虑不规则的行为(但我希望有一个简单的解释)。 总体思路:对我来说,如果我设置种子,运行rbinom()一次(即进行一个随机过程),尽pipe设置了什么样的prob值,随机种子应该改变一个增量。 然后,如果我再次将种子设置为相同的值,并运行另一个随机过程(如再次,如rbinom() ,但也许有不同的prob值),种子应该再次改变为相同的价值以前的单一随机过程。 我发现R只要我用任何prob!=0.5使用rbinom()就是这样做的。 这里是一个例子: 比较种子vector, .Random.seed和两个不同于0.5的概率: set.seed(234908) x <- rbinom(n=1,size=60,prob=0.4) temp1 <- .Random.seed set.seed(234908) x <- rbinom(n=1,size=60,prob=0.3) temp2 <- .Random.seed any(temp1!=temp2) > [1] FALSE 比较种子向量, .Random.seed ,prob = 0.5与prob!= 0.5: set.seed(234908) x <- rbinom(n=1,size=60,prob=0.5) temp1 <- .Random.seed set.seed(234908) x <- rbinom(n=1,size=60,prob=0.3) temp2 <- .Random.seed any(temp1!=temp2) > [1] TRUE temp1==temp2 > [1] TRUE […]