0
我有和這裏Distributed probability random number generator相同的問題,但在C++中。我知道如何實現它,但我的問題是 - 函數構建在當前版本的C++中嗎?從C++中概率分佈向量生成隨機數發生器
我有和這裏Distributed probability random number generator相同的問題,但在C++中。我知道如何實現它,但我的問題是 - 函數構建在當前版本的C++中嗎?從C++中概率分佈向量生成隨機數發生器
爲了完整性,我會回答這個問題。
此分佈可以使用C++ 11的隨機數生成庫生成。首先需要播種一個隨機數字引擎(這裏我使用std::mt19937
),然後使用該引擎和一個std::discrete_distribution
隨機數字分佈。
std::discrete_dstribution
的構造函數在權重序列或權重的一個迭代器範圍內。然後根據權重序列中的相應索引對生成的數字進行加權。也就是說,如果{10, 5, 1}
是權重,0
將產生10/(10 + 5 + 1) = 0.625
概率,依此類推。
下面的代碼演示瞭解決其他問題:
std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution
// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;
有應該要的東西在這裏爲你:http://en.cppreference.com/w/cpp/numeric/random – jrok 2013-02-23 10:54:26
HTTP: //en.cppreference.com/w/cpp/numeric/random/discrete_distribution多數民衆贊成它!爲什麼我第一次沒有看到它?好,謝謝。你的回答幫助了我。 – Houp 2013-02-23 10:58:52
不幸的是,Visual Studio不支持使用迭代器的構造函數。 (dist(someVector.begin(),someVector.end()):( – Houp 2013-02-23 11:19:14