我有一個這樣的字串向量:
std::vector<string> words ={"word1", "word2", "word3", "word4"}; //and many more
隨機化code
向量(在輔助向量中)并從輔助向量中獲取第一個單詞。為此,我使用random_shuffle
. 到目前為止,一切都很順利。但是現在,我想盡量減少重復的單詞。我的想法是將單詞用于另一個向量的次數保存在另一個向量中,<int>
并根據某些權重隨機化單詞,這些權重取決于生成器選擇單詞的次數。使用次數較多的詞權重較低,例如,從未使用過的詞權重最大(1.0
可能)。有什么東西STL
可以做到嗎?如果沒有,有人可以幫助我完成這項艱巨的任務嗎?任務是:
- 開始時,所有單詞都有相同的概率(相同的權重)被選中,隨機函式會選擇任何具有相同權重的單詞;
- 在第一次選擇之后,其中一個單詞的概率較低,因為它已經被選擇過一次,因此,隨機函式將從串列中選擇一個隨機單詞,但已經選擇的單詞被選中的概率較低;
- 經過一些嘗試,假設
word1
被選中了4
次word2
3
次次次word3
3
次word4
0
次。權重較低word1
的單詞是,最大權重的單詞是word4
。根據選擇單詞的次數,隨機函式將生成權重并選擇一個單詞。
提前致謝
uj5u.com熱心網友回復:
std::discrete_distribution可能會有所幫助,例如
std::random_device rd;
std::mt19937 gen(rd());
std::vector<std::string> words = {"word1", "word2", "word3", "word4"};
std::vector<std::size_t> weights = {10, 10, 10, 10};
for (int i = 0; i != 12; i) {
std::discrete_distribution<> d(weights.begin(), weights.end());
const auto index = d(gen);
std::cout << words[index] << std::endl;
weights[index]--;
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469967.html
上一篇:在C 中理解友元函式時出錯