【发布时间】:2018-10-04 05:51:48
【问题描述】:
我正在对具有随机权重的非常大的图表进行分析。我知道使用rand() 函数很差,所以我一直在根据我读到的正确的随机数生成来使用这个函数:
double randomZeroToOne()
{
random_device rd;
mt19937 mt(rd());
uniform_real_distribution<double> dist(0.0, 1.0);
double randomRealBetweenZeroAndOne = dist(mt);
return randomRealBetweenZeroAndOne;
}
每当我想在我的图表中添加一个权重时,我都会调用这个函数并将它插入到我的邻接矩阵中。但是,我担心也许我正在使用一种缓慢的方法来生成这些数字。这对于小图来说效果很好,但我的大图非常慢(可能是其他东西减慢了它的速度,但我只是想仔细检查并学习正确的方法)。保持数字质量但尽快生成数字的最佳方法是什么?
此外,如果您知道如何使用快速、良好、均匀分布的随机数初始化已知大小的向量,那就更好了(尽管我仍然对我的主要问题的答案感到好奇)。
编辑:
这是我提出的新解决方案:
#include <iostream>
#include <random>
#include<vector>
#include<iomanip>
#include<cmath>
using namespace std;
random_device rd;
mt19937 mt(rd());
uniform_real_distribution<double> dist(0.0, 1.0);
int main()
{
double randomRealBetweenZeroAndOne = dist(mt);
double anotherRandomRealBetweenZeroAndOne = dist(mt);
double anothernother = dist(mt);
vector<double> randoman(10,dist(mt));
cout << randomRealBetweenZeroAndOne << endl;
cout << anotherRandomRealBetweenZeroAndOne <<endl;
cout << anothernother <<endl;
}
如果您发现任何问题,请告诉我,特别是如果此函数将被多次调用。
【问题讨论】:
-
只使用一个引擎。多次调用
random_device当然很慢。 -
那么制作类的正确解决方案是,例如布尔文章中所做的那样吗?或者有没有更简单的方法可以在函数中完成?
-
我只是将函数的前三行放在程序的最顶部(在我认为的全局命名空间中——不确定正确的术语),并将我的函数保留为最后两条线。这是一个很好的实现吗?
标签: c++ random graph-theory