2013-02-23 136 views
0

我有和這裏Distributed probability random number generator相同的問題,但在C++中。我知道如何實現它,但我的問題是 - 函數構建在當前版本的C++中嗎?從C++中概率分佈向量生成隨機數發生器

+0

有應該要的東西在這裏爲你:http://en.cppreference.com/w/cpp/numeric/random – jrok 2013-02-23 10:54:26

+3

HTTP: //en.cppreference.com/w/cpp/numeric/random/discrete_distribution多數民衆贊成它!爲什麼我第一次沒有看到它?好,謝謝。你的回答幫助了我。 – Houp 2013-02-23 10:58:52

+0

不幸的是,Visual Studio不支持使用迭代器的構造函數。 (dist(someVector.begin(),someVector.end()):( – Houp 2013-02-23 11:19:14

回答

1

爲了完整性,我會回答這個問題。

此分佈可以使用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;